【问题标题】:How to create a account with Email And Password method after Verifying Phone with PhoneAuthProvider?使用 PhoneAuthProvider 验证电话后如何使用电子邮件和密码方法创建帐户?
【发布时间】: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


【解决方案1】:

您可以为每个用户使用一个特定的身份验证过程。如果您需要使用邮箱和密码对用户进行身份验证,请关注this process。

private FirebaseAuth mAuth;
// Initialize Firebase Auth
mAuth = FirebaseAuth.getInstance();

然后使用电子邮件和密码创建帐户。

mAuth.createUserWithEmailAndPassword(email, password)
        .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if (task.isSuccessful()) {
                    
                    // add the logic
                } else {
                    // add the logic
                }
            }
        });

帐户创建过程后,您可以使用此过程进行登录过程。

mAuth.signInWithEmailAndPassword(email, password)
        .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if (task.isSuccessful()) {
                    // add the logic
                } else {
                    // add the logic
                }
            }
        });

您可以使用此方法注销用户。

FirebaseAuth.getInstance().signOut();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-29
    • 1970-01-01
    • 2019-07-10
    • 1970-01-01
    • 1970-01-01
    • 2018-09-03
    • 1970-01-01
    相关资源
    最近更新 更多