Firebase - пользователь и currentUser ноль в закрытии - PullRequest
0 голосов
/ 20 декабря 2018

У меня проблемы с Firebase, когда моя попытка получить переменную uid с Auth.auth().currentUser?.uid, кажется, возвращает ноль.

Я поместил различные операторы печати вокруг функции (я опубликовалполная функция ниже), чтобы увидеть, будут ли они вызваны - если я помещу оператор print в if let user = user, он не будет вызван.Если я закомментирую if let user = user (и его заключительную скобку), оператор print будет успешно вызван, поэтому я предполагаю, что user равен нулю.

Теперь, если я помещу отпечаток после guard let uid = Auth.auth().currentUser?.uid else {return}, оператор print снова не вызывается, что наводит меня на мысль, что uid равно нулю, а выражение guard возвращается.

Я не уверен, почему user и Auth.auth().currentUser?.uid оба равны нулю.Как я могу изменить это, чтобы успешно получить мою uid переменную?

Вот полная функция для обеспечения некоторого контекста:

@IBAction func emailSignupNextPressed(_ sender: Any) {
    // Make sure text fields aren't empty
    guard nameField.text != "", emailField.text != "", passwordField.text != "", confirmPasswordField.text != "" else {return}

    if passwordField.text == confirmPasswordField.text {
        Auth.auth().createUser(withEmail: emailField.text!, password: passwordField.text!, completion: { (user, error) in

            if let error = error {
                print(error.localizedDescription)
            }

            if let user = user {

                guard let uid = Auth.auth().currentUser?.uid else {return}

                // Use name as Firebase display name for readability
                let changeRequest = Auth.auth().currentUser!.createProfileChangeRequest()
                changeRequest.displayName = self.nameField.text!
                changeRequest.commitChanges(completion: nil)

                // Create child node from userStorage "users". Profile image set to user's unique ID
                let imageRef = self.userStorage.child("\(uid).jpg")
                let data = UIImageJPEGRepresentation(self.selectProfileImageView.image!, 0.5)

                // Upload image to Firebase
                let uploadTask = imageRef.putData(data!, metadata: nil, completion: { (metadata, err) in
                    if err != nil {
                                                    print(err!.localizedDescription)
                    }
                    imageRef.downloadURL(completion: { (url, er) in
                        if er != nil {
                                                            print(er?.localizedDescription as Any)
                        }
                        if let url = url {


                            emailUserPicString = url.absoluteString
                            print("\n\n\npic:\(emailUserPicString)\n\n\n")

                            if emailUserPicString == "" {

                                let alertController = UIAlertController(title: "Profile Picture Error", message: "Don't forget to choose a profile picture!", preferredStyle: UIAlertControllerStyle.alert)

                                let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: {(alert :UIAlertAction!) in
                                })
                                alertController.addAction(okAction)

                                self.present(alertController, animated: true, completion: nil)

                                return

                            } else {
                                self.performSegue(withIdentifier: "emailToSetup", sender: nil)
                            }





                        }
                    })
                })
                uploadTask.resume()
            }
        })
    } else {
        print("Passwords don't match")
        passwordAlert()
    }
}

1 Ответ

0 голосов
/ 20 декабря 2018

auth().currentUser вернет user только тогда, когда пользователь вошел в систему.

Вы только что создали этого пользователя, поэтому он не вошел в систему.

Обычно вы можете получитьuid из user, переданного в блок, например:

let uid = user.uid

Если user равно нулю, создание учетной записи завершилось неудачно, и вы должны проверить ошибку.Я заметил, что вы используете

print(error.localizedDescription)

, но вы можете использовать:

print(error)

в случае, если ошибка не имеет локализованного описания.

Обычноошибка означает либо проблему с сетью, либо то, что у пользователя уже есть учетная запись.


Кстати, если вы хотите войти в систему, вы можете использовать

Auth.auth().signIn(withEmail: email, password: password) { … }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...