未发送Firebase确认电子邮件

nnvyjq4y  于 2023-05-18  发布在  其他
关注(0)|答案(8)|浏览(190)

我已成功设置Firebase电子邮件/密码身份验证,但出于安全原因,我希望用户确认其电子邮件。Firebases网站上说:
当用户使用电子邮件地址和密码注册时,将发送确认电子邮件以验证其电子邮件地址。
但是当我注册时,我没有收到确认电子邮件。
我已经看过了,只能找到一个代码发送密码重置电子邮件,但不是一个代码发送电子邮件确认。
我看了这里:
https://firebase.google.com/docs/auth/ios/manage-users#send_a_password_reset_email
有人知道我是怎么做到的吗

tcbh2hod

tcbh2hod1#

我注意到新的Firebase电子邮件身份验证文档没有正确记录。

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

请注意:
1.您只能向使用Email&Password方法创建的用户对象发送电子邮件验证信息createUserWithEmailAndPassword
1.只有在您将用户签名为经过身份验证的状态后,Firebase才会返回auth对象的promise。
1.旧的onAuth方法更改为onAuthStateChanged
要检查电子邮件是否已验证,请执行以下操作:

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

vlju58qv2#

创建用户后,将返回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(); 
});
n3schb8v

n3schb8v3#

确认电子邮件可能在您的垃圾邮件文件夹中。检查您的垃圾邮件文件夹。

gr8qqesn

gr8qqesn4#

您可以发送验证邮件并检查是否通过验证到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]
        }
    };
oo7oh9g9

oo7oh9g95#

如果你正在使用编译“com.google.firebase:firebase-auth:9.2.0”和编译“com.google.firebase:firebase-core:9.2.0”,那么方法sendEmailVerification()将不会被解析,直到你更新到9.8.0或更高版本。我花了大部分时间才弄明白。

hwazgwia

hwazgwia6#

我也一直在看这个。看来firebase改变了你发送验证的方式。为了我

user.sendEmailVerification()

不起作用如果你得到一个错误,例如user.sendEmailVerification()不存在。使用以下内容。

firebase.auth().currentUser.sendEmailVerification()
rn0zuynd

rn0zuynd7#

这不是问题的答案,但可能对某人有所帮助。不要忘记将您的网站域添加到登录方法下的授权域列表中

j7dteeu8

j7dteeu88#

您可以向其电子邮件链接到Firebase Auth帐户的任何用户发送验证电子邮件。例如,在Flutter中,您可以这样做。类似于:

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.');
              });
            }
          });
        }
      });
    }

相关问题