我阅读了一些有关此主题的其他帖子,但最终无法弄清楚如何实现这一点。
我想从我自己的电子邮件提供商(例如mailjet)发送通常从firebase本身发送的电子邮件验证电子邮件,原因是我想自定义电子邮件文本等。
我还阅读了关于 creating a custom email handler 的文章,我也会这样做。但这只是处理用户点击电子邮件中的链接时发生的操作。
目前我在用户注册后从我的 flutter 应用程序中调用它:
user.sendEmailVerification();
这使 firebase 向用户发送标准验证电子邮件。而不是这样做,我需要自己发送电子邮件。但是就像看到的 here 我需要生成这个 oobCode
。生成一个正确的链接来处理。我只是找不到如何做到这一点的例子。自己发送电子邮件的正确方法是什么?也许我只是没有找到合适的资源。非常感谢。
答案 0 :(得分:1)
您需要使用 Admin SDK 通过后端生成和发送电子邮件。最简单的方法是使用 Cloud Functions 函数,您可以从中使用 Mailjet NodeJS API wrapper。
因此,在 Cloud Functions 中,您需要:
generateEmailVerificationLink()
方法,该方法返回一个链接文档中详细介绍了第一个步骤。here。
为了自定义验证链接的 URL(例如,您想重定向到 https://www.myrapp.com/emailVerifyScreen),您需要更改如下图所示的基本 URL(“自定义操作 URL”)。还在文档中解释了 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.
});
最后一点要注意:您不能单独直接获得 oobCode
。 generateEmailVerificationLink()
方法生成完整的 URL。