簡體   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