gpt4 book ai didi

node.js - Firebase 的云功能 - 已验证电子邮件操作

转载 作者:行者123 更新时间:2023-12-02 00:19:08 25 4
gpt4 key购买 nike

我正在尝试创建一个云函数触发器,该触发器将在验证电子邮件后执行。

Cloud Functions samples我只能找到有关 onCreateonDelete 触发器的示例。

the documentation内我发现了一些关于创建自定义操作处理程序的信息,但我实际上并不想替换默认情况下的标准电子邮件验证对话框,我只想在验证电子邮件后更改“用户”的属性。

有人有这方面的经验吗?这可能吗?或者是我创建自定义验证 View /对话框网页的唯一选择?

最佳答案

我遇到了这个问题,花了很长时间才弄清楚如何解决,所以我希望这可以帮助任何也可能陷入这个问题的人:

1 -> 我为新用户创建了一个由 onCreate() 触发的函数

exports.sendConfirmationEmail = functions.auth.user()
.onCreate((user) => {
const actionCodeSettings = {
url: 'https://appNextURL.com/',
handleCodeInApp: false//ensure that the link will open into browser
};
return admin.auth().generateEmailVerificationLink(user.email, actionCodeSettings)
.then(async (link) => {
await db.collection('users').doc(user.uid).set({
verificationLink: link,
emailVerified: false
}, {merge: true});
return sendCustomVerificationEmail(user.email, user.displayName, link);
})
.catch((err) => {
console.error("Error:", err);
return Promise.reject(err);
});
});
  • generateEmailVErificationLink() 将根据我们在步骤 3 中保存的链接生成链接。

  • 函数 sendCustomVerificationEmail() 只是一个克服标准电子邮件 firebase send 的内部函数

2 -> 然后我创建了一个函数,它将接收手动 http 触发器,其中包含发送自动电子邮件时由 firebase 自动生成的数据

exports.verifyEmail = functions.https.onRequest((req, res) => {
const {mode, oobCode, apiKey, continueUrl, lang} = req.query;
const link = "https://us-central1-projectId.cloudfunctions.net/verifyEmail/?mode=" + encodeURIComponent(mode) + "&oobCode=" + encodeURIComponent(oobCode) + "&apiKey=" + encodeURIComponent(apiKey) + "&continueUrl=" + encodeURIComponent(continueUrl) + "&lang=" + encodeURIComponent(lang);
return db.collection("users")
.where("verificationLink", "==", link)
.get()
.then(function (querySnapshot) {
querySnapshot.forEach(function (user) {
const userData: UserData = user.data();
console.log("email verified: ", userData.userId);
return admin.auth().updateUser(userData.userId, {
emailVerified: true
}).then(function (userRecord) {
return db.collection('users').doc(userData.userId).set({emailVerified: true}, {merge: true});
});
});
return res.sendStatus(200).end();
}).catch(function (err) {
console.log("error:", err);
return res.sendStatus(403).end();
});
});
  • 当我将链接保存在 onCreate() 中时,我现在可以查询该链接以获取我正在验证的用户是谁

3 -> 第三步是将 Firebase 身份验证模板中的链接更改为第二步中生成的链接:

导航到身份验证>模板:

  • 单击编辑图标> 单击自定义操作 URL:

  • Navigation

  • 将步骤2生成的链接粘贴到并保存:

  • Save link

现在,自动生成的每个链接都将通过您在步骤 2 中创建的函数,您将能够处理您想要发生的操作。

我希望我能说清楚。

关于node.js - Firebase 的云功能 - 已验证电子邮件操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43503377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com