给现有用户发送验证邮件

13 浏览
0 Comments

给现有用户发送验证邮件

我正在开发一个现有用户群体的网络应用程序。最初在登录流程中没有实现电子邮件验证。

我已经成功添加了发送验证电子邮件的代码,以便为所有新注册用户发送验证电子邮件,但我还想创建一个小页面(或模态框),让当前用户看到一个按钮,点击后会将验证链接发送到他们的收件箱中。

在使用createUserWithEmailAndPassword创建用户的当前注册流程中,我能够访问user.user.sendEmailVerification方法来实现此功能,但是无法找到任何方法来访问此方法以实现对现有用户的功能。

有没有办法在创建用户之后访问sendEmailVerification方法?

我假设该方法在onAuthStateChange触发器中可用,但实施该方法会导致糟糕的用户体验(因为我不想每次用户登录时都提示他们)

编辑:

我知道文档中说明可以使用firebase.auth().currentUser来获取当前用户,但由于某种原因该方法不起作用。

此外,我在网上找到了一些引用,建议不再使用该方法,并提到要改用onAuthStateChange方法,这就是我研究这种方法的原因。

0
0 Comments

发送验证电子邮件给现有用户

在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的答案很好,但这是一个完整的示例。

0
0 Comments

问题的出现原因:使用上述代码发送验证邮件的方法在实际使用中存在问题,不起作用。后来发现很多人都遇到了这个问题,一般建议不要使用这种方法,而是使用onAuthStateChange方法。

解决方法:使用onAuthStateChange方法来发送验证邮件。

0