繁体   English   中英

Firebase 9 云 function 不向 reactjs 应用返回数据

[英]Firebase 9 cloud function not returning data to reactjs app

如果之前有人问过这个问题,我深表歉意,但我发现的所有内容都是从 2018/2019 年开始的,似乎对我的问题没有帮助。 我将 Firebase 9 与 Reactjs 应用程序一起使用,并尝试使用云函数从 httpsCallable function 中的 generatePasswordResetLink 检索链接。云 Function 工作正常,记录所有正确的值,并返回简单的字符串,就像我的电子邮件一样发送数据值,但由于某种原因它不会发回链接,因此我可以将其包含在我将从应用程序发送的 email 中。

我的反应 function 代码:

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);
    });
};

我的 firebase function 代码:

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(),
            };
        });
});

我已经尝试过使用和不使用这两个函数的异步/等待,并且在 firebase function 日志中没有出现任何错误,但仍然无法获得要发回的链接。 有人可以告诉我为什么以及如何解决这个讨厌的小麻烦吗? 谢谢!

您没有从 Cloud Function 中的顶级代码返回任何内容。

一般来说,你不应该在你的代码中混用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(),
    };
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM