«AuthDataResult» не имеет ошибки uid члена - PullRequest
0 голосов
/ 16 мая 2018

Я создаю нового пользователя в своей базе данных Firebase и пытаюсь установить для него еще несколько значений: имя, адрес электронной почты, пароль, DOB и т. Д.

/* Create User with Email and Password Provided */
    Auth.auth().createUser(withEmail: emailTextfield.text!, password: passwordTextField.text!, completion: { (user, error) in
        /* Handle errors that may occur while Creating user in Firebase */
        if let error = error {
            let alertController = UIAlertController(title: "Error", message: error.localizedDescription, preferredStyle: .alert)
            let OKAction = UIAlertAction(title: "OK", style: .default) { (action: UIAlertAction!) in

            }
            alertController.addAction(OKAction)
            self.present(alertController, animated: true, completion:nil)
            self.signUpButton.isEnabled = true
            return
        } else {

            SVProgressHUD.show(withStatus: "Loading")
            let rootRef = Database.database().reference()
            let userRef = rootRef.child("users").child(user!.uid)

Ошибка возникает в блоке завершения, когда я пытаюсь получить доступ к дочернему элементу (пользователь! .Uid). Я хочу иметь возможность установить значения, такие как:

rootRef.userRef.child("name").setValue(self.nameTextfield.text!)

но я не могу, так как должна быть проблема с обратным вызовом, когда я получаю доступ к параметру (user). Xcode заявляет, что 'AuthDataResult' не имеет идентификатора участника.

Любая помощь очень ценится.

Ответы [ 4 ]

0 голосов
/ 03 марта 2019

Это правильная форма

@IBAction func signInTapped(_ sender: Any){
    if let email = emailField.text, let password = passwordField.text{
        Auth.auth().signIn(withEmail: email, password: password, completion:
            {(user,error) in
                if error == nil {
                    if let user = user {
                        self.userUid = user.user.uid
                        self.goToCreateUserVC()
                    }
                }

        });
    }
}

Это неправильная форма:

@IBAction func signInTapped(_ sender: Any){
    if let email = emailField.text, let password = passwordField.text{
        Auth.auth()?.signIn(withEmail: email, password: password, completion:
            {(user,error) in
                if error == nil {
                    if let user = user {
                        self.userUid = user.uid
                        self.goToCreateUserVC()
                    }
                }

        });
    }
}
0 голосов
/ 16 мая 2018

приятель, просто ссылайтесь на пользователя firebase следующим образом:

var user: Firebase.User?

вверху вашего контроллера представления

0 голосов
/ 17 мая 2018

Роберто,

'user' в вашем обработчике завершения имеет тип AuthDataResult?а не типа пользователя?Однако AuthDataResult может использоваться для доступа к информации , зарегистрированного в пользователе .Чтобы получить доступ к UID в приведенном выше сценарии, просто примените следующее:

user?.user.uid

, которое должно выглядеть следующим образом при применении:

let userRef = rootRef.child("users").child(user?.user.uid)

Здесь вы берете AuthDataResult 'user' и получаете доступэто член ('user'), который, наконец, имеет тип User ?.Тогда мы просто обращаемся к UID типа пользователя, как мы это делаем регулярно.

Надеюсь, это поможет.

0 голосов
/ 16 мая 2018

Так как в сообщении об ошибке говорится о AuthDataResult, похоже, вам нужно сделать:

let userRef = rootRef.child("users").child(user!.user!.uid)

Я бы также порекомендовал вам ознакомиться с руководством Firebase по созданию пользователя .

...