2016-04-28 15 views
0

Anfänger zu beiden Swift und Firebase hier! Ich habe eine Datenbank, die etwa wie folgt aussieht:
Überprüfen usernype in Firebase mit swift

Datenbank
  Spieler
    ref.authdata.uid-for-Spieler-1
    ref.authdata.uid-for-Spieler-2
    ref.authdata.uid-for-Spieler-3
  Trainer
    ref.authdata.uid-for-Trainer-1
    ref.authdata.uid-for-Trainer-2
    ref.authdata.uid-for-Trainer-3

Die eine Hälfte meiner App für Spieler gebaut, eine für Busse. Wie überprüfe ich, ob sich das Kind ref.authData.uid unter dem Spieler oder dem Trainerkind befindet? Sind meine Daten falsch strukturiert?

Außerdem hat jede UID mehr Kinder darunter, die ich nicht in mein Diagramm aufgenommen habe, das Informationen über jeden Spieler/Trainer enthält. Unten ist die Authentifizierungsmethode, die ich für meinen vorläufigen Build verwende.

if ref.authData != nil { 

    print("There is already a user signed in!") 
    self.performSegueWithIdentifier("playerLogin", sender: self) 

} else { 
    // No user is signed in 
} 


Vielen Dank für jede Hilfe!

Antwort

1

tobeisdev hat eine gute Antwort (ich würde es akzeptieren) und die verknüpfte Antwort würde auch funktionieren.

Ich möchte auch eine Alternative hinzufügen; da Trainer und Spieler alle Benutzer sind, warum nicht mit dem Standard-Firebase/Benutzer-Entwurfsmuster gehen

users 
    user_id_0 
    type: "player" 
    name: "Larry" 
    team: "team_id_0" 
    user_id_1 
    type: "player" 
    name: "Biff" 
    team: "team_id_0" 
    user_id_2 
    type: "coach" 
    name: "Benny" 
    team: "team_id_0" 

dann könnte man einen Teams Knoten

teams 
    team_id_0 
    team_name: "nerds r' us" 
    coach: user_id_2 
    players: 
     user_id_0: true 
     user_id_1: true 

hinzufügen Sie Dies würde es ermöglichen für einen bestimmten Trainer abzufragen oder Spieler und erhalten Sie ihre UID sowie wissen, welche Mannschaft dieser Spieler oder Trainer ist Teil von. Sie könnten auch eine Mannschaft bekommen und wissen, wer der Trainer und die Spieler sind.

nur ein Gedanke.

+0

Das ist großartig, diese Struktur funktioniert viel besser für einige andere Dinge, die ich mit dieser Datenbank weiter unten machen werde. Danke Jay! In meiner letzten Frage haben Sie in Bezug auf Datenbanken erwähnt: "Je flacher, desto besser"; Ich beginne zu verstehen, wie das praktisch ist. –

0

Für Ihre erste Frage kann ich einige Möglichkeiten mit Ihnen teilen jedem ref-uid in diesem übergeordneten Knoten zu suchen und zu überprüfen, können Sie diese Zeilen von Codes verwenden:

let REF_BASE = Firebase(url: "https://yourapp.firebaseio.com") 

REF_BASE.childByAppendingPath("players").observeEventType(.Value, withBlock: { snapshot in 

     for snap in snapshot.children { 
      let key = snap.key as String 
      if key == "ref.authdata.uid-for-player-2" { 
       print(snap.value as String) // to see its value 
      } 
     } 

    }) 

REF_BASE.childByAppendingPath("players").childByAppendingPath("ref.authdata.uid-for-player-2").observeSingleEventOfType(.Value, withBlock: { snapshot in 

     if snapshot.value as? String == nil { 
      print("in usage") 
     } 
     else { 
      print("free") 
     } 

    }) 

Weitere Details sehen Jay's answer here .

+0

Aaah okay, diese Abfragen fangen an, Sinn zu ergeben. Von Parse (R.I.P) kommend ist die Strukturierung von Firebase-Abfragen für mich eine neue Sache. Können Sie erklären, was der letzte Teil Ihrer Lösung tut? Für mich sieht es so aus, als ob es überprüft, ob die UID des Benutzers in Spielern vorhanden ist, ob es einen Spieler-Login durchführt und ob er einen Coach-Login durchführt, ohne "Coaches" für die gleiche UID zu prüfen. Habe ich recht? –

+0

@JoeSloan 'wenn snapshot.value ist NSNull {' und 'if snapshot.value als? String == nil {'Selbe Sache, wenn es in diesen Blöcken ist, können Sie einen anderen Knoten überprüfen, ob Ihre UID vorhanden ist oder nicht. Aber es ist nicht in - Spielern - wie du gesagt hast. – tobeiosdev