我嘗試阻止創建已有的用戶名。防止重複的用戶使用Firebase數據庫,Swift 3
這是我的代碼,我上傳的用戶名到數據庫:
ref?.child("users").child(FIRAuth.auth()!.currentUser!.uid).child("username").setValue(self.createUserName.text)
這是代碼,我試圖讓如果用戶名已經存在或不
ref?.child("users")
.queryOrdered(byChild: "username")
.queryEqual(toValue: self.createUserName.text?.uppercased())
.observeSingleEvent(of: .value, with: { (snapshot) in
if !snapshot.exists() {
print("")
}
}) { error in
print("")
}
數據庫的外觀像這樣
Database_App {
users {
-3bSRmS4PHXUwsr7XbMBwgPozNfK2 {
username: "sebas.varela"
}
}
}
並在控制檯中出現此行:
Consider adding ".indexOn": "username" at /users to your security rules for better performance
問題是我總是得到。這有什麼問題?
你有沒有考慮利用的火力地堡數據庫規則防止重複的數據?通過@Kato查看此[answer](http://stackoverflow.com/a/20291163/4625829) –
爲了驗證用戶使用Firebase數據庫設置的唯一用戶名,您必須 - >獲取'ref.child(「users」)'處的整個節點,將其轉換爲 - >'let value = sanpshot.value as! [String:[String:String]]'然後迭代字典鍵,檢查嵌套字典的鍵「用戶名」的值是否等於用戶請求的用戶名。這是效率低下,請按照@FrankvanPuffelen的建議 – MikeG
您可以通過幾種方法完成此操作。 1)讓Firebase通過嘗試創建用戶名來完成繁重的工作,如果Firebase正在使用,則會生成錯誤。請參見[用戶名唯一性](http://stackoverflow.com/questions/40619433/firebase-username-uniqueness-in-swift/40640229#40640229)2)將用戶信息保存在用戶名爲/子節點的/ users節點中。查詢它以確定它是否存在。請參閱[使用戶名唯一](http://stackoverflow.com/questions/35243492/firebase-android-make-username-unique)這不是迅速,但涵蓋了基本知識。 – Jay