注册时如何将用户名添加到 Firebase 数据库?

Posted

技术标签:

【中文标题】注册时如何将用户名添加到 Firebase 数据库?【英文标题】:How to add a username to Firebase database upon registration? 【发布时间】:2017-05-31 21:50:12 【问题描述】:

登录后,我希望我的应用在 Firebase 数据库中创建一个以用户名命名的子项的新字段。

    if let email = emailField.text, let pass = passwordField.text 

        // Check if it's sign in or register
        if isLogin 
            // Sign in the user with Firebase
            Auth.auth().signIn(withEmail: email, password: pass, completion:  (user, error) in

                // Check that user isn't nil
                if let u = user 
                    // User is found, go to home screen

                    self.ref?.child(email).childByAutoId().setValue("1")
                    self.performSegue(withIdentifier: "goHome", sender: self)
                    print("yes")
                

当我尝试这样做时,它给了我一个名为 SIGABART 的错误,我认为这与未正确连接 segue 有关。

如果我删除这一行: self.ref?.child(email).childByAutoId().setValue("1")

或将email 字段更改为"test" 之类的随机字符串,它可以正常工作并出现在Firebase 中。

【问题讨论】:

FIRUser 有一个 displayName 属性,如果您只是想将名称与用户关联,则可以使用 FIRUserProfileChangeRequest 进行更新。 【参考方案1】:

如果我没记错的话,您不能在节点名称中使用符号 @。这是第一个问题。你可以再做一次,我认为更好,方式:

您需要创建用户来引用:

/users/uid from created FIRUser.

您可以通过以下步骤做到这一点:

例如,您的注册页面将有 3 个UITextFieldsuserEmailuserLoginuserPassword

// *1* Create user
FIRAuth.auth()!.createUser(withEmail: userEmail.text!,
                             password: userPassword.text!)
   user, error in
     if error == nil 
        // *2* Then log him in
        FIRAuth.auth()!.signIn(withEmail: self.userEmail.text!,
                               password: self.userPassword.text!)
         result in
           // *3* Create new user in database, not in FIRAuth
           let uid = (FIRAuth.auth()?.currentUser?.uid)!
           let ref = FIRDatabase.database().reference(withPath: "someStartPart/users").child(uid)
           ref.setValue(["uid": uid, "email": userEmail.text!, "login": userLogin.text!, "creationDate": String(describing: Date())])

           self.performSegue(withIdentifier: "fromRegistrationToMainPage", sender: self)
        
      else 
        print("\(String(describing: error?.localizedDescription))")
     
  

像这样。希望对您有所帮助。

【讨论】:

【参考方案2】:

Firebase Auth 不允许您存储此类值。您需要将其保存到 Firebase 数据库或其他服务中。例如在 Firebase 数据库中:

userRef.setValue("username123")

【讨论】:

是的,我的项目中也导入了 FirebaseDatabase。我尝试创建一个单独的字符串变量,将电子邮件字符串分配给该变量,然后将其发送到 firebase,但它仍然给我 SIGABRT 错误。问题似乎出在电子邮件字段上,即使我将其转换为字符串或将其分配给变量,问题仍然存在。不会将其分配给搅拌解决身份验证问题吗?这让我很困惑。【参考方案3】:

您应该将用户名值保存在数据库中。像这样的:

FIRdatabase.database().reference().child("yourchildname").updateChild(u)

(我在手机上,所以通话可能不完全一样,但应该非常接近)

干杯。

【讨论】:

【参考方案4】:

斯威夫特 4:

        //***** for realTime database
        let ref = Database.database().reference(fromURL: "https://add your project URL")
        let userRef = ref.child("users").child(user.user.uid)
        let values = ["Email": email, "UserName": userName] //userName is the name of textField

【讨论】:

虽然此代码可以回答问题,但提供有关其解决问题的方式和原因的信息可提高其长期价值

以上是关于注册时如何将用户名添加到 Firebase 数据库?的主要内容,如果未能解决你的问题,请参考以下文章

如何在用户离线时尝试将数据添加/上传到 Firebase 时显示错误?

如何将用户添加到 Firebase 数据库 [重复]

反应原生 firebase 创建用户,然后将其他数据添加到实时数据库

注册时无法将个人资料信息添加到 Firebase 集合中(vue | firebase)

将新数据添加到特定子项时如何使用 Cloud Functions 将数据写入 Firebase 实时数据库

将用户从 MongoDB 转移到 firebase