我创建了一个 Firebase 云函数,它将在数据更新时触发。当我进入 Firebase 控制台并将节点更改为 true 或 false 时,它会触发并且我会收到一封来自我的 SendGrid 设置的电子邮件。问题是我无法获取用户的电子邮件信息。
我花了一个多星期的时间翻阅文档,它说我应该能够使用 context.auth,但是,当在控制台中打印出来时,它总是“未定义”。
我一直在尝试从 Firebase 以及 /users/{uid}/email 中的用户实际信息中获取用户数据。我似乎无法弄清楚如何获取电子邮件,因为快照位于不同的位置。
我需要以某种方式提取用户的名字和电子邮件,它们位于:/users/uid/first_name 和 /users/uid/email
我希望将这两件事放入这个函数中,这样我就可以告诉 SendGrid 使用电子邮件和姓名。Sendgrid 部分工作正常。
context.params.uid 给了我用户的firebase ID,但对我没有任何作用。我似乎无法使用它来获取我需要的数据
我尝试了 authVar = context.auth,当我打印出来时,它显示“未定义”并且我的函数停止工作。
exports.myFunctionPending =
functions.database.ref('/users/{uid}/profile/isPending')
.onUpdate(async (change, context) => {
const snapshot = change.after;
const val = snapshot.val();
const userid = context.params.uid; //shows userid but is useless
const authVar = context.auth; //says undefined and does nothing
console.log(val);
console.log(userid);
const msg = {
to: 'myemail@mydomain.com',
from: 'noreply@mydomain.com',
// custom templates
templateId: 'd-b7aakjsdgwq7d798wq7d8',
substitutionWrappers: ['{{', '}}'],
//substitutions: {
dynamic_template_data: {
//name: user.displayName
name: 'My Name'
}
};
try {
await sgMail.send(msg);
console.log('This was sucessful');
} catch(error) {
console.error('There was an error while sending the email:', error);
}
return null;
});