Firebase中的电子邮件未经验证

5
我正在使用Firebase的isEmailVerified方法来验证电子邮件。以下是代码:
 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_verifying);
    FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
    mAuth=FirebaseAuth.getInstance();
    spinner=(ProgressBar)findViewById(R.id.progressBar);
    spinner.setVisibility(View.GONE);
    Log.e("I am launched","hello");
    if(user.isEmailVerified()==true){
       Log.e("I am here","hello");
        State state= new AccountSettingUp(this);
       state.doAction();
   } else {
        Log.e("Maybe i am here","yes");
       user.sendEmailVerification()
               .addOnCompleteListener(new OnCompleteListener<Void>() {
                   @Override
                   public void onComplete(@NonNull Task<Void> task) {
                       if (task.isSuccessful()) {
                           Log.d("email", "Email sent.");
                       }
                   }
               });
   }

在这里,else代码只有在电子邮件未经验证时才会运行。然而,即使我验证了电子邮件并重新启动活动,if语句仍不为true,电子邮件仍会被发送。

2个回答

6
这种行为似乎是Firebase身份验证当前版本(10.0.1)的限制,可能是一个错误。在此相关问题中也报告了相同的问题。
我尝试在电子邮件验证后对用户数据进行reload(),但没有帮助。正如相关问题所述,似乎需要注销/登录才能获取新的电子邮件验证状态。

1
对于firebase-auth:10.0.1,似乎不可能。然而,解决方法是注销用户并再次登录。在登录后,isEmailVerified()函数将正常工作。
我进行了注册活动。
    mAuth.createUserWithEmailAndPassword(Email, Password).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (task.isSuccessful()){
                            user = mAuth.getCurrentUser();
                            UserProfileChangeRequest profileChange = new UserProfileChangeRequest.Builder()
                                    .setDisplayName(FirstName)
                                    .build();

                            user.updateProfile(profileChange).addOnCompleteListener(new OnCompleteListener<Void>() {
                                @Override
                                public void onComplete(@NonNull Task<Void> task) {

                                    if(task.isSuccessful()){
                                        Toast.makeText(getBaseContext(), "Thanks for signing up, " + FirstName + "! Please verify your email!", Toast.LENGTH_SHORT).show();
                                        user.sendEmailVerification();
                                        mAuth.signOut();
                                        Intent a = new Intent(getBaseContext(),Login_Activity.class);
                                        startActivity(a);
                                    }
                                    else {
                                        Toast.makeText(getBaseContext(),"Failed to create username",Toast.LENGTH_SHORT).show();
                                    }
                                }
                            });

                        }
                        else{
                            Toast.makeText(getBaseContext(),"Failed",Toast.LENGTH_SHORT).show();
                        }
                    }
                });

如在'.updateProfile'代码的'task.isSuccessful()'部分所示,我执行了'mAuth.signOut();'并告知他们在返回登录界面之前验证其电子邮件。
在登录页面上,我使用了一个简单的'if (user.isEmailVerified())'语句来检查验证情况。如果他们仍未经过验证,则会出现一个toast提醒他们,如果已经验证,则可以进入下一个活动。
希望这可以帮助你!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接