2016-12-04 169 views
3

我正在使用Firebase的isEmailVerified方法驗證電子郵件。以下是代碼:電子郵件未在Firebase中驗證

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,並且電子郵件再次發送。

回答

4

此行爲似乎是Firebase身份驗證的當前版本(10.0.1)中的一個限制,可能是一個錯誤。 this related question中報告了相同的問題。

我試着在電子郵件驗證後做了reload()的用戶數據。這沒有幫助。據相關問題報道,似乎需要註銷/登錄才能獲得新的電子郵件驗證狀態。

0

對於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(); 
         } 
        } 
       }); 

如在 'task.isSuccessful()' 的 '.updateProfile' 代碼的部分看到的,我做了一個 'mAuth.signOut();'並通知他們在將他們的電子郵件發送回登錄屏幕之前驗證他們的電子郵件。

在登錄屏幕上,我做了一個簡單的'if(user.isEmailVerified())'語句來檢查驗證。如果他們還沒有得到驗證,敬酒似乎會提醒他們,如果他們得到驗證,他們將進入下一個活動。

希望這會有所幫助!