Как получить данные обратно из функции в firebase - PullRequest
0 голосов
/ 28 апреля 2019

Я вижу, что функция теперь работает в журнале облачных функций. Она отправляет информацию о пользователях на основе их электронной почты, однако я не могу получить эти данные обратно в клиент приложения, она просто поступает черезas Optional(<FIRHTTPSCallableResult: 0x2825b0b70>)

Вот мой код функции:

import * as functions from 'firebase-functions'
import * as admin from 'firebase-admin'
admin.initializeApp()

exports.uniqueEmail = functions.https.onCall((data) => {
  const email = data.email;
  if (!email) {
    throw new functions.https.HttpsError('invalid-argument', 'Missing email parameter');
  }
  admin.auth().getUserByEmail(email)
  .then(function(userRecord) {
    // See the UserRecord reference doc for the contents of userRecord.
    console.log('Successfully fetched user data:', userRecord.toJSON());
    return "true"
  })
  .catch(function(error) {
   console.log('Error fetching user data:', error);
   return "false"
  });
});

Вот мой быстрый код, пытающийся распечатать на консоли данные, которые я должен получить обратно:

else if (email != "" && password == ""){
    print("testing...")
    let functions = Functions.functions()
    functions.httpsCallable("uniqueEmail").call(["email": email]) { (result, error) in
        if let error = error as NSError? {
            if error.domain == FunctionsErrorDomain {
                let code = FunctionsErrorCode(rawValue: error.code)
                let message = error.localizedDescription
                let details = error.userInfo[FunctionsErrorDetailsKey]
                print("CODE:", code, " ","Message:", message, " ","DETAILS:", details)
            }
            // ...
        }
        print(result)
        if let text = (result?.data as? [String: Any])?["email"] as? String {
            let output = text
            print(output)
        }
    }
}

Ответы [ 2 ]

1 голос
/ 28 апреля 2019

Прямо сейчас верхний уровень вашего кода облачных функций ничего не возвращает, поэтому вам нужно исправить это, добавив return на верхний уровень:

exports.uniqueEmail = functions.https.onCall((data) => {
  const email = data.email;
  if (!email) {
    throw new functions.https.HttpsError('invalid-argument', 'Missing email parameter');
  }
  return admin.auth().getUserByEmail(email).then(function(userRecord) {
    console.log('Successfully fetched user data:', userRecord.toJSON());
    return {"taken" : "true"}
  }).catch(function(error) {
   console.log('Error fetching user data:', error);
   return({"taken": "false", error});
  });
});

С помощью вышеупомянутогокод, который вызывает функцию Cloud, возвращает объект JSON, который в Swift переводится в словарь: [String, Any].

0 голосов
/ 28 апреля 2019

Я в итоге получил правильный ответ, и мой новый код для моего файла swift (там была ошибка):


let functions = Functions.functions()
            functions.httpsCallable("uniqueEmail").call(["email": email]) { (result, error) in
                if let error = error as NSError? {
                    if error.domain == FunctionsErrorDomain {
                        let code = FunctionsErrorCode(rawValue: error.code)
                        let message = error.localizedDescription
                        let details = error.userInfo[FunctionsErrorDetailsKey]
                        print("CODE:", code, " ","Message:", message, " ","DETAILS:", details)
                    }
                }
                let output = result?.data as! String
                print(output)
                }
            }

...