' AuthDataResult'没有成员uid错误

时间:2018-05-15 22:50:51

标签: swift firebase firebase-authentication

我在我的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!)

但是我不能,因为当我访问(用户)参数时,回调一定存在问题。 Xcode表示' AuthDataResult'没有会员uid。

非常感谢任何帮助。

5 个答案:

答案 0 :(得分:1)

由于错误消息涉及AuthDataResult,您似乎必须这样做:

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

我还建议您查看Firebase guide on creating a user

答案 1 :(得分:1)

罗伯特,

'用户'在您的完成处理程序中是否为AuthDataResult类型?而不是用户类型?但是,AuthDataResult可用于访问签名用户的信息。要在上面的场景中访问UID,只需应用:

user?.user.uid

应用时应如下所示:

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

您正在使用AuthDataResult'用户'并访问它的成员('用户'),最终是User?类型。然后我们只是像我们经常那样访问用户类型的UID。

希望这有帮助。

答案 2 :(得分:0)

buddy只是像这样引用firebase用户;

var user:Firebase.User?

位于视图控制器的顶部

答案 3 :(得分:0)

这是正确的表格

@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()
                    }
                }

        });
    }
}

答案 4 :(得分:0)

就像大多数人已经说过的那样,它将是这样:

user?.user.uid