私はすでに存在するユーザ名の作成を防ぎます。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
問題は私がいつもを得ることです。これの問題は何ですか?
あなたはFirebaseデータベースルールを利用することを検討しているあなたは、サーバーから取得しますエラーデータの重複を防ぐには? @Katoによってこの回答[http://stackoverflow.com/a/20291163/4625829]を参照してください。 –
firebaseデータベースの設定方法で一意のユーザー名を確認するには、 'ref.child(" users ")'のノード全体で、 - > 'let value = sanpshot.value as! [String:[String:String]] 'を実行し、辞書キーを繰り返して、ネストされた辞書のキー' username'の値がユーザーが要求したユーザー名と等しいかどうかを確認します。これは非効率です、@FrankvanPuffelenのアドバイスに従います – MikeG
あなたはいくつかの方法でこれを達成できます。 1)Firebaseがユーザ名を作成しようとすることで重労働を起こした場合、Firebaseはエラーを生成します。 [User name Uniqueness](http://stackoverflow.com/questions/40619433/firebase-username-uniqueness-in-swift/40640229#40640229)を参照してください。2)ユーザ名が/ usersノードにあるユーザ情報を子供として保持します。それが存在するかどうかを調べるためにそれを照会します。素早くないが基本をカバーする[make username unique](http://stackoverflow.com/questions/35243492/firebase-android-make-username-unique)を参照してください。 – Jay