[英]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.