Как вызвать функцию с параметром, который я установил в функциях Firebase - PullRequest
0 голосов
/ 24 апреля 2019

Я развернул этот код в своем проекте функций 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 голосов
/ 24 апреля 2019

Вы фактически смешиваете Облачные функции HTTP и Функции вызываемого облака :

Код функции вашего облака соответствует HTTP-коду, но код на передней панели -end, кажется, вызывает Callable.

Вы должны адаптировать одну или другую, наиболее вероятно, адаптировать вашу облачную функцию к 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 };
  })
});

Посмотритев документе для получения более подробной информации, в частности, как обрабатывать ошибки.Документ довольно подробный и очень понятный.

...