web-dev-qa-db-ja.com

Firebase確認メールが送信されていません

Firebaseのメール/パスワード認証を正常に設定しましたが、セキュリティ上の理由から、ユーザーにメールを確認してもらいたいです。 Firebases Webサイトで次のように書かれています。

ユーザーがメールアドレスとパスワードを使用してサインアップすると、確認メールが送信され、メールアドレスが確認されます。

しかし、サインアップしても、確認メールが届きません。

私は見て、パスワードリセットメールを送信するためのコードのみを見つけましたが、確認メールを送信するためのコードは見つけられませんでした。

私はここを見ました:

https://firebase.google.com/docs/auth/ios/manage-users#send_a_password_reset_email

誰も私がそれを行う方法についての手がかりを手に入れましたか?

45
Benja0906

新しいFirebaseメール認証ドキュメントが適切に文書化されていないことに気付きました。

firebase.auth().onAuthStateChanged(function(user) {
  user.sendEmailVerification(); 
});

次のことに注意してください。

  1. Email&Passwordメソッドを使用して作成したユーザーオブジェクトにのみメール検証を送信できますcreateUserWithEmailAndPassword
  2. ユーザーを認証済み状態に署名した後にのみ、Firebaseは認証オブジェクトのプロミスを返します。
  3. 古いonAuthメソッドはonAuthStateChangedに変更されました。

メールが検証されているかどうかを確認するには:

firebase.auth().onAuthStateChanged(function(user) { 
  if (user.emailVerified) {
    console.log('Email is verified');
  }
  else {
    console.log('Email is not verified');
  }
});
99
Xavier J. Wong

ユーザーを作成すると、Userオブジェクトが返されます。ユーザーオブジェクトでは、ユーザーのメールが検証済みかどうかを確認できます。

ユーザーが検証されていない場合、ユーザーオブジェクト自体でsendEmailVerificationメソッドをトリガーできます。

firebase.auth()
    .createUserWithEmailAndPassword(email, password)
    .then(function(user){
      if(user && user.emailVerified === false){
        user.sendEmailVerification().then(function(){
          console.log("email verification sent to user");
        });
      }
    }).catch(function(error) {
      // Handle Errors here.
      var errorCode = error.code;
      var errorMessage = error.message;

      console.log(errorCode, errorMessage);
    });

AuthStateをリッスンして確認することもできます。次のメソッドの問題は、新しいセッションごとに(ページを更新することで)新しいメールが送信されることです。

firebase.auth().onAuthStateChanged(function(user) {
  user.sendEmailVerification(); 
});
6
tdhulster

確認メールを送信し、AuthListenerで次のように確認されたかどうかを確認できます。

mAuthListener = new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
            FirebaseUser user = firebaseAuth.getCurrentUser();

            if (user != null) {

//---- HERE YOU CHECK IF EMAIL IS VERIFIED

                if (user.isEmailVerified()) {
                    Toast.makeText(LoginActivity.this,"You are in =)",Toast.LENGTH_LONG).show();
                } 

                else {

//---- HERE YOU SEND THE EMAIL

                    user.sendEmailVerification();
                    Toast.makeText(LoginActivity.this,"Check your email first...",Toast.LENGTH_LONG).show();
                }

            } else {
                // User is signed out
                Log.d(TAG, "onAuthStateChanged:signed_out");
            }
            // [START_EXCLUDE]
            updateUI(user);
            // [END_EXCLUDE]
        }
    };
4
Pablo Prado

コンパイル "com.google.firebase:firebase-auth:9.2.0"を使用し、 'com.google.firebase:firebase-core:9.2.0'をコンパイルしている場合、メソッドsendEmailVerification()は更新するまで解決されません。 9.8.0以降に。私はそれを理解する前にほとんどの時間を無駄にしました。

2
MbaiMburu