2016-10-27 4 views
2

Ich versuche, Benutzer mit diesem Code aus einer Datenbank Firebase zu holen, aber ich bekomme diese FehlermeldungFirebase - die Erlaubnis verweigert, wenn der Benutzer das Abrufen

abbrechen Fehler Fehler Domain = com.firebase-Code = 1 „Zugriff verweigert“ UserInfo = {NSLocalizedDescription = Berechtigung verweigert}

Wie sollten meine Regeln eingerichtet werden?

Hier ist der Code:

FIRDatabase.database().reference().child("users").observe(.childAdded, with: { (snapshot) in 

     print("snapshot \(snapshot)") 
     //all users right here n shyt 
     if let dictionary = snapshot.value as? [String: AnyObject] { 
      let user = User() 

      //class properties have to match up with firebase dictionary names 
      user.setValuesForKeys(dictionary) 
      self.users.append(user) 


      DispatchQueue.main.async { 
       self.messageTable.reloadData() 
      } 
     } 
      print(snapshot) 

     }, withCancel: { (error) in 
      print("cancel error \(error)") 
    }) 

Dies ist meine Regeln in Firebase:

{ 
"rules": { 
"users": { 
    "$uid": { 
    ".read": "$uid === auth.uid", 
    ".write": "$uid === auth.uid" 
    } 
} 
} 
} 
+1

Sie wollen auf jeden Fall Code in dem 'withCancel' setzen, wenn die Lese zu erkennen wird abgebrochen. Siehe http://stackoverflow.com/documentation/firebase/5548/how-do-i-listen-for-errors-when-accessing-the-database/24788/detect-errors-when-reading-data-on-ios # t = 201610271759080332703 –

+0

Geben Sie auch Ihre minimale JSON-Baumstruktur an. – Dravidian

+0

Ich habe getan, was Frank sagte zu tun und gehen und Fehler zurück, sagte "Abbrechen Fehler Fehler Domain = com.firebase Code = 1" Berechtigung verweigert "UserInfo = {NSLocalizedDescription = Erlaubnis verweigert}" – user3462448

Antwort

3

aktuelle Sicherheitsregeln, die Sie nur die Erlaubnis zu geben, um Ihre aktuellen Benutzer sind Gegeben nur seinen eigenen Knoten zuzugreifen.

Wenn das die Dynamik ist, die Sie verwenden möchten, versuchen Sie, einen anderen übergeordneten Knoten zu erstellen, der die Details enthält, die Sie mit anderen Benutzern teilen möchten.

users:{ 
userID1 : {../*PERSONAL DETAILS*/}, 
userID2 : {../*PERSONAL DETAILS*/}, 
userID3 : {../*PERSONAL DETAILS*/}, 
userID4 : {../*PERSONAL DETAILS*/}, 
userID5 : {../*PERSONAL DETAILS*/}, 
.... 
    }, 
USERS_INFO: { 
    userID1 : {../*Details to share*/}, 
    userID2 : {../*Details to share*/}, 
    userID3 : {../*Details to share*/}, 
    userID4 : {../*Details to share*/}, 
    userID5 : {../*Details to share*/}, 
    .... 
    } 

Und Ihre Sicherheitsregeln aktualisieren, um: -

{ 
"rules": { 
"users": { 
    "$uid": { 
    ".read": "$uid === auth.uid", 
    ".write": "$uid === auth.uid" 
    } 
    }, 
    "USERS_INFO":{ 
    ".read" : "auth != null", 
    ".write" : "auth != null" 
    } 
    } 
} 

Abfrage wie: -

FIRDatabase.database().reference().child("USERS_INFO").observe(.childAdded, with: { (snapshot) in 
+0

dies behoben! Danke! – user3462448

Verwandte Themen