Firebase确认邮件未发送
Firebase确认邮件未发送
我已成功设置了Firebase的电子邮件/密码验证,但出于安全原因,我希望用户确认他们的电子邮件。\nFirebase的网站上写道:\n
\n当用户使用电子邮件地址和密码注册时,会发送一封确认电子邮件以验证其电子邮件地址。\n
\n但是当我注册时,我没有收到确认电子邮件。\n我找了一下,只找到了发送密码重置电子邮件的代码,但没有找到发送确认电子邮件的代码。\n我在这里找到了一些信息:\nhttps://firebase.google.com/docs/auth/ios/manage-users#send_a_password_reset_email\n有人知道我该如何做吗?
Firebase确认电子邮件未发送的原因可能是以下几点:
1. 使用createUserWithEmailAndPassword
方法创建用户后立即调用sendEmailVerification()
方法,此时user.emailVerfied
属性为undefined
。
2. 在onAuthStateChanged
方法中调用sendEmailVerification()
方法,但每次刷新页面时都会发送一封新的电子邮件。
解决方法如下:
1. 在createUserWithEmailAndPassword
方法的.then
回调中,使用credential.user.emailVerified
来检查用户的电子邮件是否已验证。
2. 使用onAuthStateChanged
方法监听AuthState
,在用户状态更改时再调用sendEmailVerification()
方法,以避免在每个新会话中都发送电子邮件。
示例代码如下:
firebase.auth() .createUserWithEmailAndPassword(email, password) .then(function(credential) { if (credential && credential.user.emailVerified === false) { credential.user.sendEmailVerification().then(function() { console.log("电子邮件验证已发送给用户"); }); } }).catch(function(error) { // 处理错误 var errorCode = error.code; var errorMessage = error.message; console.log(errorCode, errorMessage); }); firebase.auth().onAuthStateChanged(function(user) { if (user && user.emailVerified === false) { user.sendEmailVerification(); } });
问题:Firebase确认电子邮件未发送的原因和解决方法
原因:
- Firebase新的电子邮件身份验证文档没有正确记录。
- `firebase.auth().onAuthStateChanged`方法替代了旧的`onAuth`方法。
- 只能向使用`createUserWithEmailAndPassword`方法创建的用户对象发送电子邮件验证。
- 只有在用户通过身份验证后,Firebase才会返回auth对象的promise。
- `user.emailVerified`属性可以检查电子邮件是否已验证。
解决方法:
- 使用`firebase.auth().onAuthStateChanged`方法来检查电子邮件是否已验证。
- 在`onAuthStateChanged`回调函数中,使用`user.emailVerified`属性来判断电子邮件是否已验证。
这个回答非常有帮助,但很遗憾该信息还没有出现在文档中。
需要注意的是,`onAuthStateChanged`是一个对Auth对象的观察者,因为在初始化过程中通常不会立即可用。在这种情况下,通过Firebase函数自动发送电子邮件验证是为了回答初始问题。
在React Native应用中,将`onAuthStateChange`在主App.js中调用或分派给saga函数,这是一种保持持久会话的好方法吗?
有人可以使用非Google电子邮件地址创建“google.com”帐户,此时`emailVerified`标志将返回false,但尝试发送电子邮件验证将无效。有没有办法区分这种情况,以便我们可以忽略验证状态,或者这是Firebase的一个错误?
根据我的经验,使用Microsoft帐户也可以成功使用电子邮件验证。我认为应该更新文档中的说明,电子邮件验证应该适用于任何尚未`emailVerified`且在Firebase身份验证中配置了有效电子邮件的用户。
参考链接:没有提供其他文档的链接。