【问题标题】:'AuthDataResult' has no member uid error'AuthDataResult' 没有成员 uid 错误
【发布时间】:2018-05-15 22:50:51
【问题描述】:

我正在我的 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”没有成员 uid。

非常感谢任何帮助。

【问题讨论】:

    标签: swift firebase firebase-authentication


    【解决方案1】:

    罗伯托,

    完成处理程序中的

    'user' 是 AuthDataResult 类型?而不是用户类型?但是,AuthDataResult 可用于访问已登录用户的信息。要在上述场景中访问 UID,只需应用以下代码:

    user?.user.uid
    

    应用时应该是这样的:

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

    在这里,您正在获取 AuthDataResult 'user' 并访问它的成员 ('user'),它最终属于 User? 类型。然后我们只是像往常一样访问用户类型的 UID。

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      【解决方案3】:

      这是正确的格式

      @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】:

        正如大多数人已经说过的那样,它会是这样的:

        user?.user.uid
        

        【讨论】:

          【解决方案5】:

          好友只需像这样引用 firebase 用户;

          var 用户:Firebase.User?

          在视图控制器的顶部

          【讨论】:

          • 上述(FRANKS ANSWER)答案将嵌套 uid,这将是一个令人头疼的参考,嵌套不被认为是有效的数据库代码,因为 Firebase 不是 SQL,而是一个 HTML 检索系统,你没有'不需要嵌套来获取用户数据,这就是为什么你有选项 childByAutoID()
          猜你喜欢
          • 1970-01-01
          • 2018-10-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-04-06
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多