Firebase 自定义验证电子邮件

时间:2021-02-24 10:06:10

标签: firebase flutter firebase-authentication

我阅读了一些有关此主题的其他帖子,但最终无法弄清楚如何实现这一点。

我想从我自己的电子邮件提供商(例如mailjet)发送通常从firebase本身发送的电子邮件验证电子邮件,原因是我想自定义电子邮件文本等。

我还阅读了关于 creating a custom email handler 的文章,我也会这样做。但这只是处理用户点击电子邮件中的链接时发生的操作。

目前我在用户注册后从我的 flutter 应用程序中调用它:

user.sendEmailVerification();

这使 firebase 向用户发送标准验证电子邮件。而不是这样做,我需要自己发送电子邮件。但是就像看到的 here 我需要生成这个 oobCode。生成一个正确的链接来处理。我只是找不到如何做到这一点的例子。自己发送电子邮件的正确方法是什么?也许我只是没有找到合适的资源。非常感谢。

1 个答案:

答案 0 :(得分:1)

您需要使用 Admin SDK 通过后端生成和发送电子邮件。最简单的方法是使用 Cloud Functions 函数,您可以从中使用 Mailjet NodeJS API wrapper

因此,在 Cloud Functions 中,您需要:

  1. 调用 Admin SDK 的 generateEmailVerificationLink() 方法,该方法返回一个链接
  2. 生成包含此链接的电子邮件
  3. 向用户发送电子邮件(请参阅 Mailjet NodeJS API 包装器文档)

文档中详细介绍了第一个步骤。here

为了自定义验证链接的 URL(例如,您想重定向到 https://www.myrapp.com/emailVerifyScreen),您需要更改如下图所示的基本 URL(“自定义操作 URL”)。还在文档中解释了 here

enter image description here


然后,当用户点击他/她收到的电子邮件中的链接时,您需要按照您在问题中提到的文档中的说明进行操作:Create custom email action handlers。请参阅第 4 点“通过调用 applyActionCode 处理电子邮件地址验证”。

具体而言,在您的应用 https://www.myrapp.com/emailVerifyScreen 的页面中,您从 URL(例如 var actionCode = getParameterByName('oobCode');)获取查询字符串值,并使用这些值调用 applyActionCode(actionCode) 方法。当这个方法返回的promise完成时,就知道邮件已经通过验证了。

  var actionCode = getParameterByName('oobCode'); 
  auth.applyActionCode(actionCode).then((resp) => {
    // Email address has been verified.

    // TODO: Display a confirmation message to the user.
    // You could also provide the user with a link back to the app.

    // TODO: If a continue URL is available, display a button which on
    // click redirects the user back to the app via continueUrl with
    // additional state determined from that URL's parameters.
  }).catch((error) => {
    // Code is invalid or expired. Ask the user to verify their email address
    // again.
  });

最后一点要注意:您不能单独直接获得 oobCodegenerateEmailVerificationLink() 方法生成完整的 URL。