我已将此代码部署到我的firebase函数项目中:
import * as functions from 'firebase-functions'
import * as admin from 'firebase-admin'
admin.initializeApp()
export const getEmail = functions.https.onRequest((request, response) => {
var from = request.body.sender;
admin.auth().getUserByEmail(from)
.then(snapshot => {
const data = snapshot.toJSON()
response.send(data)
})
.catch(error => {
//Handle error
console.log(error)
response.status(500).send(error)
})
})
其中包含一个电子邮件参数,该参数是从我在应用程序上的用户输入获得的。我的应用程序代码如下:
Functions.functions().httpsCallable("https://us-central1-projectname.cloudfunctions.net/getEmail").call(email) { (result, error) in
if let error = error as NSError? {
if error.domain == FunctionsErrorDomain {
//email isnt taken
let code = FunctionsErrorCode(rawValue: error.code)
let message = error.localizedDescription
let details = error.userInfo[FunctionsErrorDetailsKey]
print(code, message, details)
}
// ...
}
if let text = (result?.data as? [String: Any])?["text"] as? String {
// email taken
}
}
当我运行该应用程序并调用该函数时,它似乎什么也不做,没有错误消息显示,也没有数据回传。我想念什么?
更新:我去了日志,那里没有发生任何事情,好像从未调用过该函数一样。
答案 0 :(得分:0)
您实际上是在混淆HTTP Cloud Functions和Callable Cloud Functions:
您的Cloud Function代码与HTTP代码相对应,但是您前端中的代码似乎称为Callable代码。
您应该采用以下两种方法之一,最有可能将您的Cloud Function调整为Callable之一:
exports.getEmail = functions.https.onCall((data, context) => {
const from = data.sender;
return admin.auth().getUserByEmail(from)
.then(userRecord => {
const userData = userRecord.toJSON();
return { userData: userData };
})
});
有关更多详细信息,请参阅文档,尤其是如何处理错误。该文档非常详细且非常清晰。