如何解决Firebase功能与Sendgrid集成
我对Firebase函数还很陌生,我试图创建一个简单的onCreate()触发器,但是似乎无法启动并运行它。
我不是用Sendgrid正确返回诺言吗?不知道我在想什么
const functions = require("firebase-functions");
const admin = require("firebase-admin");
const sendGrid = require("@sendgrid/mail");
admin.initializeApp();
const database = admin.database();
const API_KEY = '';
const TEMPLATE_ID = '';
sendGrid.setApiKey(API_KEY);
const actionCodeSettings = {
...
};
exports.sendEmailVerify = functions.auth.user().onCreate((user) => {
admin
.auth()
.generateEmailVerificationLink(user.email,actionCodeSettings)
.then((url) => {
const msg = {
to: user.email,template_id: TEMPLATE_ID,dynamic_template_data: {
subject: "test email",name: name,link: url,},};
return sendGrid.send(msg);
})
.catch((error) => {
console.log(error);
});
});
firebase函数的日志
sendEmailVerify
Function execution started
sendEmailVerify
Function returned undefined,expected Promise or value
sendEmailVerify
Function execution took 548 ms,finished with status: 'ok'
sendEmailVerify
{ Error: Forbidden
sendEmailVerify
at axios.then.catch.error (node_modules/@sendgrid/client/src/classes/client.js:133:29)
sendEmailVerify
at process._tickCallback (internal/process/next_tick.js:68:7)
sendEmailVerify
code: 403,sendEmailVerify
message: 'Forbidden',
解决方法
您没有在Cloud Function中正确返回Promises chain。您应该执行以下操作:
exports.sendEmailVerify = functions.auth.user().onCreate((user) => {
return admin // <- See return here
.auth()
.generateEmailVerificationLink(user.email,actionCodeSettings)
.then((url) => {
const msg = {
to: user.email,template_id: TEMPLATE_ID,dynamic_template_data: {
subject: "test email",name: name,link: url,},};
return sendGrid.send(msg);
})
.catch((error) => {
console.log(error);
return null;
});
});
,
这里至少有两个编程问题。
-
您不会从所有异步工作完成后解析的函数中返回承诺。这是一个要求。调用
then
和`catch是不够的。实际上,您从函数处理程序中得到了一个承诺。 -
您正在调用
sendGrid.send(email)
,但从未在代码中的任何地方定义变量email
。如果是这种情况,那么您要将一个未定义的值传递给sendgrid。
您的项目也有可能不在付款计划中,在这种情况下,由于免费计划中缺少出站网络,对sendgrid的呼叫将始终失败。您将需要制定付款计划才能完全正常工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。