Ich versuche, die Erstellung von bereits vorhandenen Benutzernamen zu verhindern.Verhindern doppelte Benutzer mit Firebase Database, Swift 3
Dies ist mein Code, wo ich Benutzernamen in die Datenbank hochladen:
ref?.child("users").child(FIRAuth.auth()!.currentUser!.uid).child("username").setValue(self.createUserName.text)
Und das ist der Code, wo ich zu bekommen versuchen, wenn der Benutzername bereits oder nicht
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("")
}
Die Datenbank sieht existiert wie diese
Database_App {
users {
-3bSRmS4PHXUwsr7XbMBwgPozNfK2 {
username: "sebas.varela"
}
}
}
Und diese Linie in der Konsole angezeigt:
Consider adding ".indexOn": "username" at /users to your security rules for better performance
Das Problem ist, dass ich immer bekomme. Was ist das Problem damit?
Haben Sie Datenbank-Regeln Verwendung der Firebase betrachtet machen um doppelte Daten zu vermeiden? Sehen Sie dies [Antwort] (http://Stackoverflow.com/a/20291163/4625829) von @Kato –
Um eindeutige Benutzernamen zu überprüfen mit der Art, wie Sie Ihre Firebase-Datenbank-Setup haben, müssen Sie -> eine Momentaufnahme der gesamter Knoten bei 'ref.child (" users ")', wirf das nach -> 'let value = sanpshot.value as! [String: [String: String]] 'und durchlaufen Sie dann die Wörterbuchschlüssel, um zu prüfen, ob der Wert für den Schlüssel' username' des verschachtelten Wörterbuchs mit dem Benutzernamen übereinstimmt, nach dem der Benutzer gefragt hat. Dies ist ineffizient, folgen Sie @FrankvanPuffelen Beratung – MikeG
Sie können dies auf verschiedene Arten erreichen. 1) Lassen Sie Firebase das schwere Heben durchführen, indem Sie versuchen, den Benutzernamen zu erstellen. Wenn Firebase verwendet wird, erzeugt Firebase einen Fehler. Siehe [Benutzername-Eindeutigkeit] (http://stackoverflow.com/questions/40619433/firebase-username-uniqueness-in-swift/40640229#40640229). 2) Benutzerinformationen in einem Knoten/users mit Benutzernamen als untergeordnete Benutzer beibehalten. Frage danach, ob es existiert. Siehe [make username unique] (http://stackoverflow.com/questions/35243492/firebase-android-make-username-unique), das nicht schnell ist, aber die Grundlagen abdeckt. – Jay