从 onCall firebase 云函数返回一个字符串

Posted

技术标签:

【中文标题】从 onCall firebase 云函数返回一个字符串【英文标题】:Return a string from onCall firebase cloud function 【发布时间】:2020-05-31 14:20:01 【问题描述】:

我正在研究 firebase 云功能,并尝试使用 javascript 和云功能在 firebase auth 注册用户。 我要做的是将数据发送到云函数,从云函数返回数据,然后在 web 应用程序上使用。我该怎么做?以下是两个代码:

Javascript 发送值,运行良好:

const sendData = firebase.functions().httpsCallable('registerUser');
    sendData(
        email: userEmail,
        password: userPassword

    );

这里是我的云功能,它正在正确注册用户。

exports.registerUser = functions.https.onCall((data, context) => 
const userEmail = data.email;
const userPassword = data.password;

    admin.auth().createUser(
        email: userEmail,
        emailVerified: false,
        password: userPassword,
        displayName: "name",
        photoURL: "...", 
        disabled: false
    )
    .then(() => 
        //want to return messages if succeed or not

      ) );

我想从云功能发送消息,然后在我的 javascript 代码中获取它。我该怎么做?

【问题讨论】:

【参考方案1】:

正如documentation 中所解释的,要“将数据发送回客户端,返回可以进行 JSON 编码的数据”并返回错误,您应该“抛出(或返回被拒绝的 Promise)functions.https.HttpsError 的实例”。

exports.registerUser = functions.https.onCall((data, context) => 
    const userEmail = data.email;
    const userPassword = data.password;

    return admin.auth().createUser(  // See the return here
        email: userEmail,
        emailVerified: false,
        password: userPassword,
        displayName: "name",
        photoURL: "...",
        disabled: false
    )
        .then(userRecord => 
            //want to return messages if succeed or not
            return 
                result: 'success'
            ;
        )
        .catch(error => 
            throw new functions.https.HttpsError('invalid-argument', 'message');
        )
);

您可以使用不同的error codes,具体取决于错误类型。请参阅doc。


然后,在客户端,你需要做如下:

sendData(
    email: userEmail,
    password: userPassword
).then(function(response) 
   // Read result of the Cloud Function.
   var result = response.data.result;
   // ...
 ).catch(function(error) 
   // Getting the Error details.
   var code = error.code;
   var message = error.message;
   var details = error.details;
   // ...
 );

【讨论】:

【参考方案2】:

见https://firebase.google.com/docs/functions/get-started#review_complete_sample_code

你做了类似的事情

exports.registerUser = functions.https.onCall((data, context) => 
const userEmail = data.email;
const userPassword = data.password;

    const userRecord = admin.auth().createUser(
        email: userEmail,
        emailVerified: false,
        password: userPassword,
        displayName: "name",
        photoURL: "...", 
        disabled: false
    )

    // userRecord is promise, not a value
    return userRecord;
   );

【讨论】:

以上是关于从 onCall firebase 云函数返回一个字符串的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 云功能 - onCall 不起作用

Firebase https onCall 功能被 cors 阻止

Firebase Http Oncall 函数

有啥方法可以使用角度组件中的 onCall Firebase 函数?

错误:响应不是具有 onCall 的 firebase 函数上的有效 JSON 对象

Firebase可调用函数+ CORS