从 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 https onCall 功能被 cors 阻止
有啥方法可以使用角度组件中的 onCall Firebase 函数?