Firebase 9云函数未将数据返回到reactjs应用程序



如果之前有人问过我,我很抱歉,但我发现的一切都是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函数日志中没有得到任何错误,但仍然无法获得要发送回的链接。有人能告诉我为什么以及如何解决这个讨厌的小麻烦吗?谢谢

您不会从云函数中的顶级代码返回任何内容。

一般来说,您不应该在代码中混合使用thenawait,因为这会很快导致这样的错误。

一个简单的解决方案是去掉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(),
};
});

相关内容

  • 没有找到相关文章

最新更新