如何使用在Firebase函数中设置的参数调用函数

时间:2019-04-24 17:53:47

标签: javascript swift firebase firebase-authentication google-cloud-functions

我已将此代码部署到我的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
                }
            }

当我运行该应用程序并调用该函数时,它似乎什么也不做,没有错误消息显示,也没有数据回传。我想念什么?

更新:我去了日志,那里没有发生任何事情,好像从未调用过该函数一样。

1 个答案:

答案 0 :(得分:0)

您实际上是在混淆HTTP Cloud FunctionsCallable 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 };
  })
});

有关更多详细信息,请参阅文档,尤其是如何处理错误。该文档非常详细且非常清晰。