[英]Check Firebase database if username is already in use
我正在尝试验证用户输入的用户名是否已被使用。 该代码当前检查电子邮件是否在使用中,如果不存在则创建用户。 如何使它读取数据库以查看用户名是否已被使用?
FIRAuth.auth()?.createUser(withEmail: email!, password: password!) { (user, error) in
if error?._code == (FIRAuthErrorCode.errorCodeInvalidEmail.rawValue)
{
var ref: FIRDatabaseReference!
ref = FIRDatabase.database().reference()
ref.child("Users").observeSingleEvent(of: FIRDataEventType.value, with: { (snapshot) in
if snapshot.hasChild(name!){
ref.child("users").child((user?.uid)!).setValue(["username": name])
print("true rooms exist")
} else {
self.displayMyAlertMessage(userMessage: "Username already in use. Please choose another.")
print("false room doesn't exist")
}
})
} else {
self.displayMyAlertMessage(userMessage: "Email already in use. Please see the login page.")
return
}
}
您可以做的是创建另一个孩子,例如“ takenUsernames”,并将所有用户名存储在此处。 像这样,即使用户未通过身份验证,您也可以检查用户是否被盗。 您还必须将规则添加到数据库中。
数据库规则:
"takenUsernames": {
".read": true,
".write": "auth != null",
"$username": {
".validate": "!root.child('takenUsernames').hasChild($username)"
}
}
在Swift中,您可以这样操作,其中用户名是textField中的值。 它基本上只是获取用户名,并检查takenUsername子级中是否存在该用户名:
let usernamesRef = FIRDatabase.database().reference().child("takenUsernames")
usernamesRef.child(username).observeSingleEvent(of: .value, with: { (snapshot) in
if snapshot.exists() {
//Username is already taken
} else {
//Username doesn't exist, do your stuff
}
现在,每次注册用户时,您都必须将键值对添加到takeedUsernames子级中。 就我而言,我是这样做的:
usernamesRef.updateChildValues([username:uid])
希望您能明白。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.