Firebase 向用户发送电子邮件验证

Phi*_*hil 5 javascript firebase vue.js firebase-authentication

我正在使用Javascript并与我的应用程序Vue集成firebase

场景(已搭建)

  • 我有一个sign in用户登录的页面
  • 对于要在emailVerified属性中签名的用户应为 true

问题

  • 我只能在使用该firebase.auth().createUserWithEmailAndPassword(email, password)方法时发送验证电子邮件

报名方式

signup: async (email, password) => {
    const user = await firebase.auth().createUserWithEmailAndPassword(email, password)
    await user.user.sendEmailVerification()
    return `Check your email for verification mail before logging in`
  },
Run Code Online (Sandbox Code Playgroud)

所需的解决方案

  • 我从 firebase console

  • email作为参数传递或uid该方法应该向用户发送验证电子邮件,以便他们可以验证他们的电子邮件

  • 完全废弃该signup方法,因为我不再需要它来发送验证邮件

无论如何,是否可以在不登录的情况下发送验证电子邮件?

Ren*_*nec 7

您可以使用云功能生成电子邮件验证链接,并通过 Sendgrid、Mailjet 或 Mailgun 等电子邮件微服务或通过您自己的自定义 SMTP 服务器将其发送给用户。

当使用事件处理程序创建 Firebase 用户时,您将触发此云函数functions.auth.user().onCreate()

由于您将通过 Firebase 控制台创建用户,因此无需用户登录即可触发云功能。

沿着这些思路:

exports.sendEmailVerification = functions.auth.user().onCreate((user) => {

    const email = user.email;

    const url = '...'  //Optional, see https://firebase.google.com/docs/auth/custom-email-handler
    const actionCodeSettings = {
        url: url
    };

    // Use the Admin SDK to generate the email verification link.
    return admin.auth().generateEmailVerificationLink(email, actionCodeSettings)
        .then((link) => {
            // Construct email verification template, embed the link and send the email
            // by using custom SMTP server.
            // or a microservice like Sendgrid
            return ...
        })
        .catch((error) => {
            // Some error occurred.
        });

});
Run Code Online (Sandbox Code Playgroud)

您将在此处找到发送电子邮件的云函数的官方示例。


Fra*_*len 5

有没有办法在不登录的情况下发送验证电子邮件?

验证电子邮件只能从客户端 SDK 发送,并且只能在用户登录后发送。这样做是为了防止滥用 Firebase 服务器发送垃圾邮件。

如果 Firebase 现有的电子邮件验证流程不能满足您的需求,您可以实现自己的自定义流程,并在满足您的验证要求后使用管理 SDK 设置验证状态。