如果之前有人问过我,我很抱歉,但我发现的一切都是2018/2019年的,似乎对我的问题没有帮助。我正在使用带有Reactjs应用程序的Firebase 9,并尝试使用Cloud函数从httpsCallable函数中的generatePasswordResetLink检索链接。云功能运行良好,记录所有正确的值,并返回简单的字符串,比如我在数据值中发送的电子邮件,但由于某种原因,它不会发回链接,因此我可以将其包含在我将从应用程序发送的电子邮件中。
我的反应功能代码:
const funcUpdPassword = async () => {
const sendEmail = user['email'];
const authEmail = user['username'] + '@' + office['domain'];
const updPassword = httpsCallable(functions, 'updPassword');
await updPassword({
dest: sendEmail,
auth: authEmail,
}).then((result) => {
console.log('result data:', result.data);
const data: any = result.data;
console.log('data:', data);
});
};
我的火球功能代码:
exports.updPassword = functions.https.onCall(async (data, context) => {
const dest = data.dest;
const auth = data.auth;
await admin.auth()
.generatePasswordResetLink(auth)
.then((link) => {
console.log('link:', link.toString());
console.log(`Hello ${dest}`);
return {
text: `Hello ${dest}`,
link: link.toString(),
};
});
});
我在两个函数上都尝试过使用和不使用async/await,并且在firebase函数日志中没有得到任何错误,但仍然无法获得要发送回的链接。有人能告诉我为什么以及如何解决这个讨厌的小麻烦吗?谢谢
您不会从云函数中的顶级代码返回任何内容。
一般来说,您不应该在代码中混合使用then
和await
,因为这会很快导致这样的错误。
一个简单的解决方案是去掉await
并使用return
:
exports.updPassword = functions.https.onCall((data, context) => {
const dest = data.dest;
const auth = data.auth;
// 👇
return admin.auth()
.generatePasswordResetLink(auth)
.then((link) => {
return {
text: `Hello ${dest}`,
link: link.toString(),
};
});
});
或者你也可以去掉then
:
exports.updPassword = functions.https.onCall(async (data, context) => {
const dest = data.dest;
const auth = data.auth;
const link = await admin.auth().generatePasswordResetLink(auth);
return {
text: `Hello ${dest}`,
link: link.toString(),
};
});