给现有用户发送验证邮件
给现有用户发送验证邮件
我正在开发一个现有用户群体的网络应用程序。最初在登录流程中没有实现电子邮件验证。
我已经成功添加了发送验证电子邮件的代码,以便为所有新注册用户发送验证电子邮件,但我还想创建一个小页面(或模态框),让当前用户看到一个按钮,点击后会将验证链接发送到他们的收件箱中。
在使用createUserWithEmailAndPassword
创建用户的当前注册流程中,我能够访问user.user.sendEmailVerification
方法来实现此功能,但是无法找到任何方法来访问此方法以实现对现有用户的功能。
有没有办法在创建用户之后访问sendEmailVerification
方法?
我假设该方法在
onAuthStateChange
触发器中可用,但实施该方法会导致糟糕的用户体验(因为我不想每次用户登录时都提示他们)
编辑:
我知道文档中说明可以使用firebase.auth().currentUser
来获取当前用户,但由于某种原因该方法不起作用。
此外,我在网上找到了一些引用,建议不再使用该方法,并提到要改用onAuthStateChange
方法,这就是我研究这种方法的原因。
发送验证电子邮件给现有用户
在onAuthStateChanged事件中不应该调用sendEmailVerification(),因为如果用户的电子邮件未经验证,它将在每次页面加载时发送一封电子邮件。
相反,如果User.emailVerified为false,应该在页面上显示一个通知,其中包含一个链接,用于向用户发送电子邮件。
下面是一个可行的示例:
// 在页面加载时监听身份验证状态的更改
firebase.auth().onAuthStateChanged(function (user) {
// 如果用户已登录
if (user) {
// 如果用户的电子邮件未经验证
if (!user.emailVerified) {
// 显示通知栏,告知用户需要点击链接验证他们的电子邮件。假设链接如下所示:
// 发送验证电子邮件
showNotification();
}
}
});
// 附加到链接的onclick事件的函数
function sendEmailVerification() {
// 获取当前用户
const user = firebase.auth().currentUser;
// 如果用户的电子邮件已经验证,则退出
if (user.emailVerified) {
return;
}
// 告诉Firebase发送验证电子邮件并丢弃promise
user.sendEmailVerification().then().catch();
}
Dharmaraj的答案很好,但这是一个完整的示例。