我实际使用火力地堡谷歌权威性在用户,之后签约,我想带用户进入数据库,还包括用户的手机号码的基本细节,所以我的问题是可以使用电话号码的认证只是验证的用户(使用OTP)的手机号码,并在那之后我可以将其存储到数据库? 谢谢!
Answer 1:
如果你要使用唯一的电话号码验证火力手机认证,根据我,你这样做,但通过实施如下:
首先在登录方法页,使电话号码登录方法,并在电话号码使用这种发送验证码
PhoneAuthProvider.getInstance().verifyPhoneNumber(
phoneNumber, // Phone number to verify
60, // Timeout duration
TimeUnit.SECONDS, // Unit of timeout
this, // Activity (for callback binding)
mCallbacks); // OnVerificationStateChangedCallbacks
你会得到响应mCallbacks
并初始化回调使用本
mCallbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
@Override
public void onVerificationCompleted(PhoneAuthCredential credential) {
// this method executed if phone number verified you can do your stuff here if you only want to verify phone number.
// or you can also use this credentials for authenticate purpose.
}
@Override
public void onVerificationFailed(FirebaseException e) {
// This callback is invoked in an invalid request for verification is made,
// for instance if the the phone number format is not valid.
}
@Override
public void onCodeSent(String verificationId,
PhoneAuthProvider.ForceResendingToken token) {
// The SMS verification code has been sent to the provided phone number, we
// now need to ask the user to enter the code and then construct a credential
//and then execute your method if number entered is correct.
}
};
不要忘了使用最新的火力依赖像
compile 'com.google.firebase:firebase-auth:11.4.2'
希望这会帮助你。
Answer 2:
如果您已经登录与谷歌的用户。 您可以链接/更新电话号码,该用户: https://firebase.google.com/docs/reference/js/firebase.User#updatePhoneNumber https://firebase.google.com/docs/reference/js/firebase 。用户#linkWithPhoneNumber
这意味着用户将有2个提供商连接(电话/ google.com)。 用户将能够与任何在将来登录。 但如果你只是想揭露谷歌作为供应商。 你可以只提供在您的登录页。
您可以在数据库中存储用户了。
Answer 3:
由于火力地堡认证是惊人的,
你可以有 多个身份验证“方法”上的账户:
在这个例子中,所讨论的应用程序,允许用户使用来创建一个帐户任
- 电话
- 电子邮件
- Facebook的链接
所以。 在应用程序的欢迎屏幕,它说:“加入SuperApp,使用电话,电子邮件或Facebook链接!!” 而且对于那些三种方法三个按钮。
但事实上,火力地堡身份验证的工作方式,每个用户其实可以有那些不止一个 。
第三个用户有同时具有电子邮件和电话认证。 第四个用户那里有三个!
所以,我们说,一个用户创建了“电子邮件身份验证”的帐户。
后来,会有一个按钮,上面写着“连结你的Facebook帐户!” ,
和另外一个“关联您的电话号码!”
(请注意,在许多情况下,这取决于你的启动是什么,你可能希望用户拥有多个身份验证方法,以提高安全性。或者,你可能只是想使他们更容易登录。)
令人难以置信的是,火力地堡可以处理这一切。 (或者,您可以花一年时间手工开发它!)
几点...
是的,完全火力地堡负责发送电子邮件或短信验证码的照顾。 完全自动的。
需要注意的是,你不能“用”惊人的邮件/电话验证服务“用于其他目的”。 例如,我们正在做一个应用程序有你需要确认购买或什么的,用短信代码的特征。 需要注意的是有绝对无关,与用户登录项,它是在使用短信代码的应用程序只是一个无关的功能。 你不能 (可惜!)使用火力地堡的史诗短信系统,做到这一点。 (你只使用任何广泛可用的短信代码发送服务的,而不是。)
一个巨大的点混乱。 请注意, 电子邮件和/或电话号码,这里讨论的火力地堡的火力地堡认证系统存储。 上面的图像是从火力地堡认证系统 。 有根本没有连接到您的数据表。 因此,几乎每一个应用程序在数据表像“的userdata /”。 当然,你可以为您提供方便(或其他)在像“电子邮件”,“Facebook的名称”或任何数据表中的字段。 这些领域都根本没有连接,以任何方式,以“实际的,真正的” 火力地堡认证系统 (如上图所示)。 这些只是字段,你在你的开发填充 - 他们能抱你把任何值。 这里有很多很多问题上那么,人们混淆了一些价值“USER_EMAIL”恰好是在数据库中,与“实际的,真正的”在火力地堡认证系统中所使用火力地堡电子邮件或电话。
请注意,如果你与Facebook或其他社交认证开始。 有时,这些社交媒体上拥有的用户的电子邮件/电话/等等。 但是,有绝对实际火力地堡没有连接验证邮件/电话。
如果用户恰好需要改变自己的实际验证的电子邮件或电话,对此有专门的功能链接
在火力地堡认证系统是如此惊人 ,许多移动项目使用火力地堡纯粹的惊人火力地堡认证系统的便利性,即使他们没有特别使用火力地堡如此。
(在邮件正面有一个细节你会使用自己的电子邮件服务器发送电子邮件(即GoDaddy或sendmail或任何 - 。只是任何电子邮件服务器通常使用)有一个在火力地堡的后端插槽,你只输入您的电子邮件服务器/密码。或者,在开发过程中/测试火力地堡甚至会发送电子邮件给你,但它只能到达缓慢,因为它正在使用,却有无数的火力地堡,应用程序开发人员自己像一个大众使用的帐户)。
摘要
令人惊讶的是,你可以有一个以上的认证方法,它全部由火力地堡处理
请注意,任何电话/电子邮件等,你可能会发生在你的数据 ,在火力地堡认证没有任何关系的“实际”电话/电子邮件
在火力地堡控制台,看看左边,进入一个以上的“数据库”看到“认证”! 许多新闻开发商没有意识到这一点!
Answer 4:
private FirebaseAuth mAuth;
private PhoneAuthProvider.OnVerificationStateChangedCallbacks mCallbacks;
String mVerificationId = "";
PhoneAuthProvider.ForceResendingToken mResendToken;
mAuth = FirebaseAuth.getInstance();
mCallbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks()
{
@Override
public void onVerificationCompleted(PhoneAuthCredential phoneAuthCredential) {
//edtVerify.setText(phoneAuthCredential.getSmsCode());
signInWithPhoneAuthCredential(phoneAuthCredential);
}
@Override
public void onVerificationFailed(FirebaseException e) {
if (e instanceof FirebaseAuthInvalidCredentialsException) {
Log.e("Invalid Phone Number ","====>");
} else if (e instanceof FirebaseTooManyRequestsException) {
Log.e("Quota exceeded ","====>");
}
}
@Override
public void onCodeSent(String verificationId, PhoneAuthProvider.ForceResendingToken token) {
mVerificationId = verificationId;
mResendToken = token;
}
};
//SEND VERIFICATION CODE...
try {
PhoneAuthProvider.getInstance().verifyPhoneNumber(mLastEnteredPhone, 120,
TimeUnit.SECONDS,
mContext,
mCallbacks);
} catch (Exception e) {
e.printStackTrace();
}
//VERIFY CODE...
try {
PhoneAuthCredential credential = PhoneAuthProvider.getCredential(verificationId, code);
signInWithPhoneAuthCredential(credential);
} catch (Exception e) {
e.printStackTrace();
}
//SIGN IN WITH PHONE...
private void signInWithPhoneAuthCredential(PhoneAuthCredential credential)
{
mAuth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful())
{
FirebaseUser user = task.getResult().getUser();
String currentUid = user.getUid();
String currentPhone = user.getPhoneNumber();
} else {
if (task.getException() instanceof FirebaseAuthInvalidCredentialsException) {
Log.e("Invalid Code ","====>");
}
}
}
});
}