Невозможно прочитать информацию с помощью вызова getDocument () из Firebase Firestore - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь реализовать регистрацию для входа в приложение с помощью Firebase Firestore. Проблема заключается в том, что мне удается правильно выполнить регистрацию и, когда я регистрирую пользователя, я могу сохранить в firebase определенную информацию, которую я хочу восстановить при входе пользователя.

Для этого я используйте firebase auth (что работает отлично), чтобы получить идентификатор пользователя, а затем попросите Firestore (здесь у меня проблема) отправить мне информацию, соответствующую уникальному идентификатору пользователя, который там хранится. Для этого я использую функцию asyn c:

 private func retrieveLogInData(completion: @escaping (String, String, String) -> Void){
        //Firestore reference
        let userID = Auth.auth().currentUser!.uid
        let dbRef = Firestore.firestore().collection("users").document(userID)
        //Asking for the document
        dbRef.getDocument(){ (snapShot, err) in
           if let data = snapShot?.data() {
            let c = data["c"]
            let uc = data["uc"]
            let pc = data["pc"]
            //just to debug we add any response
            completion(c as! String, uc as! String, pc as! String)
           }else{
            print("Error")
             //just to debug we add any response
            completion("no","no","no")
            }
        }
    }

Вызов выполняется из функции auth:

@IBAction func LogInButton(_ sender: UIButton) {
    userName=userIDTextField.text;
    Auth.auth().signIn(withEmail: userName, password: passWord) {
        (authResult, error) in
        if (error != nil){
            var returnedErrorMessage : String = ""
            if let errCode = AuthErrorCode(rawValue: error!._code) {
                switch errCode {
                    case .invalidEmail:
                        returnedErrorMessage = "Not a valid email address."
                    case .wrongPassword:
                        returnedErrorMessage = "eMail and password combination is not valid"
                    case .userNotFound:
                        returnedErrorMessage = "eMail and password combination is not valid"
                    case .networkError:
                        returnedErrorMessage = "Unable to connect to the server. Check internet connection"
                    case .missingEmail:
                        returnedErrorMessage = "Missing email. Please provide a valid email adress"
                    case .nullUser:
                        returnedErrorMessage = "Missing email. Please provide a valid email adress"
                  default:
                        returnedErrorMessage = "Unkwown error. Try again"
                }
            }
            self.errorMessageLabel.text=returnedErrorMessage

        }else{

            self.retrieveLogInData{(c, uc, pc) in. //<----MY PROBLEM COMES HERE
                print("c")
                print("here!") //FOR DEBUGGING
            }

Когда я отлаживаю, я вижу, что в retrieveLogInData функция, когда вызывается предложение debrief.getDocument(){ (snapShot, err). Поток напрямую переходит к коду и выходит из него, ничего не делая.

Если я проверяю идентификатор документа, он работает. Функция достигает этого. Проблема возникает при получении информации (вызов getDocument).

Буду признателен за любую помощь.

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...