注册时如何将用户名添加到 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 个UITextFields
:userEmail
、userLogin
和userPassword
。
// *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 集合中(vue | firebase)