2016-12-04 28 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()関数が正常に動作します。

I 'は.updateProfile' コードの 'task.isSuccessful()' 部分に見られるように、私はサインアップ活動

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

をした 'mAuth.signOutを();'ログイン画面に戻す前に電子メールの確認を通知することができます。

[ログイン]画面では、確認するための簡単な「if(user.isEmailVerified())」ステートメントを実行しました。まだ検証されていない場合は、そのことを知らせるトーストが表示され、検証された場合は次のアクティビティに進みます。

希望すると便利です。

関連する問題