Ich bin ein Neuling für Firebase, so dass jeder Hinweis geschätzt wird. Im Moment verwende ich Firebase Login & Auth, um alle Authentifizierung für mich zu behandeln. Aber ich möchte einige Benutzerdaten, wie Benutzername DOB, created_at ... Ich habe einen Benutzerknoten erstellt, und ich bin Kinderknoten an Benutzer mit der eindeutigen ID anhängen, die ich bei der Anmeldung oder Anmeldung erhalten. Ich möchte jedoch sicherstellen, dass keine doppelten Benutzernamen im System vorhanden sind. Wie kann ich überprüfen, ob ein Benutzername bereits existiert, bevor ich auf den Server schreibe?Sicherstellung eines eindeutigen Benutzernamens beim Erstellen eines neuen Benutzers in Firebase (Swift)
Antwort
Ich untersuche gerade die gleiche Sache. Mein Problem ist, dass ich auch die Persistenz aktivieren möchte, also muss ich wissen, auf was offline zugegriffen werden kann. Wenn Sie Ausdauer verwenden, würde ich auch bestimmte Operationen nicht anzuerkennen, wie die Überprüfung Benutzername Existenz empfehlen, wenn Ihr Kunde offline ist, die Sie durch das Hören tun „.info/verbunden“, wie im Einzelnen hier:
https://firebase.google.com/docs/database/ios/offline-capabilities#section-connection-state
Meine persönlichen Workflow hierfür ist wie folgt:
- Anmelden Konto des Benutzers
- überprüfen Sie, ob der Benutzer bereits einen Benutzernamen hat
die Feuerbasis Datenbank Überprüfen Sie, ob die Benutzerdaten einen Benutzernamen enthält:
DB/users/*userUID*/username != nil
- Wenn sie einen Benutzernamen nicht haben, sie dann aufgefordert, einen Benutzernamen zu setzen.
Wenn sie ihren Benutzernamen festgelegt, ob der Benutzername in vorhanden:
DB/usernames/*username*/ != nil
Wenn es nicht existiert, dann schreiben Sie den Benutzernamen und userId in den beiden Datenbankpositionen oben geprüft.
z.
user.uid = wewe32323
username = scuba_steve
DB/usernames/scuba_steve = wewe32323
DB/users/wewe32323/username = scuba_steve
So, jetzt haben Sie die DB/Benutzernamen verweisen, dass Sie schnell überprüfen, um zu sehen, ob jemand einen Benutzernamen bereits hat, und auch Sie haben DB/Benutzer/wo Sie schnell einen Benutzernamen für einen bestimmten Benutzer finden können.
Ich werde nicht sagen, das ist idiotensicher, wie ich noch ein paar Bedenken um gleichzeitige Anfragen. Mein aktuelles Problem, das ich untersuche, besteht darin, dass Sie die Benutzerzuordnung zu einem bestimmten Benutzer löschen können. Der Benutzer kann sich darauf verlassen, dass seine lokale Kopie der Datenbank fälschlicherweise bestätigt, dass sie noch diesem Benutzernamen zugewiesen sind.
Sie könnten in die Schreibregeln der Datenbank schauen, um es niemandem zu erlauben, vorhandene Daten zu ändern (erzwingen, dass Sie nur in das Verzeichnis DB/Benutzernamen schreiben können, wenn keine Daten vorhanden sind.Dadurch wird verhindert, dass derjenige, der den Nutzernamen festlegt, überschrieben wird, was meiner Meinung nach ein wichtiger Schritt ist.
Es kann auch eine Untersuchung wert Transaktionen sein:
https://firebase.google.com/docs/database/ios/save-data#save_data_as_transactions
Aber ich richtige Schreibregeln glauben, wie im obigen Absatz erwähnt sollte zuverlässig Schreiben ermöglichen.
Darüber hinaus würde ich empfehlen, den Benutzernamen in Kleinbuchstaben zu speichern und in Kleinbuchstaben einfügen/überprüfen das 'DB/usernames /' -Verzeichnis und der eingegebene Fall im 'DB/users /' -Verzeichnis, so können "Scooby" und "Scooby" nicht bei zwei verschiedenen Benutzern registriert werden, aber Sie behalten immer noch ihre gewünschte Großschreibung wenn Sie rufen den Benutzernamen eines Benutzers aus seinen Benutzerinformationen ab. –
Ich habe dies effektiver in eine meiner neueren Apps implementiert, und ich würde auf jeden Fall empfehlen, Transaktionen zu verwenden. Fühlen Sie sich frei, mich zu kommentieren oder zu chatten, wenn Sie weitere Ratschläge dazu oder zu meiner Implementierung wünschen. Die meisten meiner oben erwähnten Wert- und Datenbanküberprüfungsmethoden sind jedoch immer noch relevant, nur besser geeignet, um innerhalb eines Transaktionsblocks aufzurufen. –
Ich habe das hier ausführlicher dokumentiert: http://stackoverflow.com/q/37543872/5960425 –
können Sie überprüfen, ob der Benutzername wie folgt gespeichert wird:
let username = "fred"
self.ref.child("users/\(username)").observeSingleEventOfType(.Value, withBlock: { snapshot in
if snapshot.exists() {
Wenn der Snapshot in der Schließung zurück vorhanden ist, dann wird der Benutzername „fred“ existiert.
- 1. Fehlender Vorlagenfehler beim Erstellen eines neuen Benutzers
- 2. Erstellen eines neuen Firebase-Benutzers - der richtige Weg
- 3. Fehler beim Registrieren eines neuen Benutzers auf Firebase
- 4. Erhalte eine ungültige Anfrage 400 beim Erstellen eines Benutzers (Firebase)
- 5. Erstellen eines neuen WordPress-Benutzers mit Webservice
- 6. Firebase setDisplayName des Benutzers beim Erstellen des Benutzers Android
- 7. Erstellen eines neuen MySQL-Benutzers in Amazon RDS-Umgebung
- 8. Fehler beim Erstellen eines neuen Entitätsdatenmodells
- 9. Gradle Standardabhängigkeiten beim Erstellen eines neuen Projekts
- 10. NullPointerException beim Erstellen eines neuen Dialogfelds
- 11. System.ArgumentNullException beim Erstellen eines neuen Silverlight-Projekts
- 12. Standardwerte beim Erstellen eines neuen Elements zuweisen
- 13. Speichereffizienz beim Löschen eines HashSets vs. Erstellen eines neuen HashSets
- 14. Standardrolle nach der Registrierung eines neuen Benutzers
- 15. Methode zum Erstellen eines eindeutigen Validierungsschlüssels/Nummer
- 16. Parse Ort eines anderen Benutzers (swift)
- 17. Wie wird der Standardwert für den Designwert beim Erstellen eines neuen Benutzers in Vtiger CRM festgelegt?
- 18. Problem beim Erstellen eines neuen Benutzers/Schemas in Oracle 11G-Instanz
- 19. Validierung eines Benutzernamens und eines Passworts in C#
- 20. Sicherstellung eines bestimmten Typs Ergebnis in SML
- 21. Auswählen des richtigen Ziels beim Erstellen eines neuen WKInterfaceControllers
- 22. Erstellen eines Benutzers in Linux mit Python
- 23. Sicherstellung der Existenz eines Benutzers auf einem Debian GNU/Linux-System
- 24. Sicherstellung der Eindeutigkeit eines MySQL-Schlüssels
- 25. Warum erhalte ich beim Erstellen eines neuen DotNetNuke-Benutzers über C# eine nullReferenceException?
- 26. Wie setze ich whodunnit für paper_trail beim Erstellen eines neuen Benutzers?
- 27. Erstellen eines MongoDB-Benutzers über die Befehlszeile
- 28. Verwenden von% für den Host beim Erstellen eines MySQL-Benutzers
- 29. Pass Parameter beim Erstellen eines neuen Formulars in Delphi SDI
- 30. Doppelter Quellordner in Eclipse beim Erstellen eines neuen Maven-Projekts
Sie müssen dafür eine Datenstruktur und Sicherheitsregeln einrichten. Siehe http://StackOverflow.com/Questions/25294478/how-do-you-prevent-duplicate-user-properties-in-firebase –