【发布时间】:2021-06-14 10:39:57
【问题描述】:
我正在开发一种购物 Android 应用程序,在创建新用户帐户时,我想用他的电话号码验证用户,并希望通过那里的电子邮件登录用户。
PhoneAuthProvider.getInstance().verifyPhoneNumber(users.getPhoneNumber(), 120, TimeUnit.SECONDS, Otp_Activity.this,
new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
@Override
public void onCodeSent(@NonNull @NotNull String s, @NonNull @NotNull PhoneAuthProvider.ForceResendingToken forceResendingToken) {
super.onCodeSent(s, forceResendingToken);
otpID = s;
progressDialog.dismiss();
Toast.makeText(Otp_Activity.this, "Otp sent", Toast.LENGTH_SHORT).show();
}
@Override
public void onVerificationCompleted(@NonNull @NotNull PhoneAuthCredential phoneAuthCredential) {
signInWithPhoneAuthCredential(phoneAuthCredential);
}
@Override
public void onVerificationFailed(@NonNull @NotNull FirebaseException e) {
Toast.makeText(Otp_Activity.this, e.getMessage(), Toast.LENGTH_SHORT).show();
progressDialog.dismiss();
}
});
private void signInWithPhoneAuthCredential(PhoneAuthCredential credential) {
firebaseAuth = SplashScreen.firebaseAuthForPhone;
firebaseAuth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful())
{
Toast.makeText(Otp_Activity.this, "Account Created", Toast.LENGTH_SHORT).show();
createAccountWithEmail(userEmail, userPassword);
}
else
{
Toast.makeText(Otp_Activity.this, task.getException().getMessage(), Toast.LENGTH_SHORT).show();
}
}
});
}
public void createAccountWithEmail(String email, String passWord)
{
firebaseAuthForEmail.createUserWithEmailAndPassword(email, passWord)
.addOnSuccessListener(new OnSuccessListener<AuthResult>() {
@Override
public void onSuccess(AuthResult authResult) {
firebaseAuth.signOut();
Toast.makeText(Otp_Activity.this, "Email Account Created", Toast.LENGTH_SHORT).show();
startActivity(new Intent(getApplicationContext(), MainActivity.class));
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull @NotNull Exception e) {
Toast.makeText(Otp_Activity.this, e.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
为什么我无法用电子邮件创建的帐户退出?
PhoneAuthProvider 验证帐户后是否登录?如果是,有什么办法可以阻止它?
【问题讨论】:
-
你让更简单的实现变得更复杂。如果您希望您的用户使用电子邮件/电话登录,请在更新用户电子邮件后首先使用电话登录创建用户并要求他创建密码。现在在您的登录中指定用户使用登录方法并检查用户是否设置了密码并使用该密码登录。简单!
-
如果您不确定我要解释的过程,我会尝试用代码发布答案。
-
如果您想注销您的用户,请使用
FirebaseAuth.getInstance().Sign out(); -
FirebaseAuth.getInstance().Sign out();我正在使用它,但感谢您的帮助
-
PhoneAuthProvider验证账号后是否登录?如果是,有什么方法可以阻止它吗? 在您的代码中是或否的答案是您在手机登录完成后执行创建用户操作! Phone Auth验证电话号码并登录用户。
标签: android firebase firebase-authentication