webentwicklung-frage-antwort-db.com.de

firestore: PERMISSION_DENIED: Fehlende oder unzureichende Berechtigungen

Ich bekomme den Fehler 

gettingdocuments.com.google.firebase.firestore.FirebaseFirestoreException: PERMISSION_DENIED: Fehlende oder unzureichende Berechtigungen.

für den folgenden Code auf else-Anweisung

db.collection("users")
        .get()
        .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
            @Override
            public void onComplete(@NonNull Task<QuerySnapshot> task) {
                 if (task.isSuccessful()) {
                     for (DocumentSnapshot document : task.getResult()) {
                         s(document.getId() + " => " + document.getData());
                     }
                 } else {
                     s("Error getting documents."+ task.getException());
                 }
             }
         });
25
S Rekhu

Hinweis: Dadurch wird die Sicherheit für die Datenbank vollständig deaktiviert, sodass sie ohne Authentifizierung weltweit beschreibbar ist. Dies ist keine zu empfehlende Lösung.

Es funktioniert einfach für mich.

Gehen Sie in Datenbank -> Regeln -> 

allow read, write: if false ändern; bis wahr;

46
Luvnish Monga

In meinem Fall hatte ich also die folgenden DB-Regeln:

service cloud.firestore {
  match /databases/{database}/documents {
    match /stories/{story} {
      function isSignedIn() {
        return request.auth.uid != null;
      }

      allow read, write: if isSignedIn() && request.auth.uid == resource.data.uid
    }
  }
}

Wie Sie sehen, gibt es ein uid -Feld im story -Dokument, um den Eigentümer zu markieren.

Dann habe ich in meinem Code alle Geschichten abgefragt (Flutter):

Firestore.instance
          .collection('stories')
          .snapshots()

Und es ist fehlgeschlagen, weil ich bereits einige Geschichten über verschiedene Benutzer hinzugefügt habe. Um dies zu beheben, müssen Sie der Abfrage eine Bedingung hinzufügen:

Firestore.instance
          .collection('stories')
          .where('uid', isEqualTo: user.uid)
          .snapshots()

Weitere Informationen finden Sie hier: https://firebase.google.com/docs/firestore/security/rules-query

3
rwozniak

stellen Sie sicher, dass Ihre Datenbank weder leer ist noch Ihre Abfrage für die Sammlung ist, die nicht vorhanden ist

2
itzhar

Gehe zu Datenbank -> Regeln

Dann unter Regeln geändert

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if false;
    }
  }
}

nach unten  

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if request.auth != null;
    }
  }
}
1

Darüber hinaus erhalten Sie möglicherweise diese Fehlermeldung, wenn der Auflistungsverweis aus Ihrem Code nicht mit dem Auflistungsnamen in Firebase übereinstimmt.

Der Name der Sammlung auf Firebase ist beispielsweise users, aber Sie referenzieren ihn mit db.collection("Users") oder db.collection("user").

Es ist auch case sensitive.

Hoffe das hilft jemandem 

0
Anga Koko

Die oben angegebenen Antworten sind gefährlich für die Gesundheit Ihrer Datenbank. Sie können Ihre Datenbank weiterhin nur zum Lesen und nicht zum Schreiben zur Verfügung stellen:

  service cloud.firestore {
    match /databases/{database}/documents {
     match /{document=**} {
       allow read: if true;
       allow write: if false;
      }
   }
}
0
Ssubrat Rrudra