prosource

Firebase 확인 이메일이 전송되지 않음

probook 2023. 6. 27. 22:22
반응형

Firebase 확인 이메일이 전송되지 않음

Firebase 전자 메일/암호 인증을 설정했지만 보안상의 이유로 사용자가 전자 메일을 확인해야 합니다.파이어베이스 웹사이트에는 다음과 같이 나와 있습니다.

사용자가 전자 메일 주소와 암호를 사용하여 등록하면 전자 메일 주소를 확인하는 확인 전자 메일이 전송됩니다.

그런데 가입을 해도 확인 메일이 오지 않습니다.

제가 찾아보니 비밀번호 재설정 이메일을 보내는 코드만 있고 이메일 확인 메일을 보내는 코드는 없습니다.

저는 여기를 살펴보았습니다.

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

내가 어떻게 할 수 있는지 아는 사람?

새로운 Firebase 이메일 인증 문서가 제대로 문서화되지 않았습니다.

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

참고:

  1. Email & Password 메서드 createUserWithEmail AndPassword를 사용하여 만든 사용자 개체에만 전자 메일 확인을 보낼 수 있습니다.
  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');
  }
});

사용자를 생성하면 사용자의 전자 메일이 확인되었는지 확인할 수 있는 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(); 
});

확인 전자 메일이 스팸 폴더에 있을 수 있습니다.스팸 폴더를 확인합니다.

확인 이메일을 보내고 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]
        }
    };

컴파일 "com.google"을 사용하는 경우.firebase:firebase-auth:9.2.0"을 입력하고 'com.google'을 컴파일합니다.firebase:firebase-core:9.2.0' 메서드 sendEmailVerification()은 9.8.0 이상으로 업데이트할 때까지 확인되지 않습니다.그것은 제가 알기 전에 대부분의 시간을 낭비했습니다.

저도 이것을 보고 있습니다.파이어베이스가 당신이 확인서를 보내는 방식을 바꾼 것 같습니다.나를 위해.

user.sendEmailVerification() 

작동하지 않았습니다.user.sendEmailVerification()과 같은 오류가 발생하면 존재하지 않습니다.다음을 사용합니다.

firebase.auth().currentUser.sendEmailVerification()

질문에 대한 답은 아니지만 누군가에게 도움이 될 수도 있습니다.로그인 방법의 인증된 도메인 목록에 사이트 도메인을 추가하는 것을 잊지 마십시오.

Firebase Auth 계정에 연결된 전자 메일을 가진 모든 사용자에게 확인 전자 메일을 보낼 수 있습니다.예를 들어 Float에서는 다음과 같은 작업을 수행할 수 있습니다.

    Future<void> signInWithCredentialAndLinkDetails(AuthCredential authCredential,
        String email, String password) async {
      // Here authCredential is from Phone Auth
      _auth.signInWithCredential(authCredential).then((authResult) async {
        if (authResult.user != null) {
          var emailAuthCredential = EmailAuthProvider.getCredential(
            email: email,
            password: password,
          );
          authResult.user
              .linkWithCredential(emailAuthCredential)
              .then((authResult,onError:(){/* Error Logic */}) async {
            if (authResult.user != null) {
              await authResult.user.sendEmailVerification().then((_) {
                debugPrint('verification email send');
              }, onError: () {
                debugPrint('email verification failed.');
              });
            }
          });
        }
      });
    }

언급URL : https://stackoverflow.com/questions/37431128/firebase-confirmation-email-not-being-sent

반응형