【问题标题】:Email not being Verified in Firebase电子邮件未在 Firebase 中验证
【发布时间】:2017-04-19 05:36:10
【问题描述】:

我正在使用 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,并且再次发送了电子邮件。

【问题讨论】:

    标签: android email firebase firebase-authentication


    【解决方案1】:

    此行为似乎是 Firebase 身份验证当前版本 (10.0.1) 中的一个限制,可能是一个错误。 this related question 报告了同样的问题。

    我尝试在电子邮件验证后对用户数据进行reload()。那没有帮助。正如相关问题中所报告的,似乎需要注销/登录才能获得新的电子邮件验证状态。

    【讨论】:

      【解决方案2】:

      对于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 来提醒他们,如果他们通过验证,则他们将继续进行下一个活动。

      希望这会有所帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-05-30
        • 2020-07-16
        • 2021-07-10
        • 2021-10-10
        • 2019-04-03
        • 2018-12-25
        相关资源
        最近更新 更多