340 votes

Firestore: PERMISSION_DENIED: autorisations manquantes ou insuffisantes

Je reçois l'erreur

gettingdocuments.com.google.firebase.firestore.FirebaseFirestoreException: PERMISSION_DENIED: autorisations manquantes ou insuffisantes.

pour le code ci-dessous sur une autre déclaration

 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());
                 }
             }
         });
 

485voto

Luvnish Monga Points 1341

Remarque: Ceci désactive complètement la sécurité de la base de données, la rendant accessible en écriture pour tous sans authentification !!! Ce n'est pas une solution à recommander.

Cela fonctionne simplement pour moi.

Aller dans la base de données -> Règles ->

Change allow read, write: if false; à vrai;

146voto

Md Nakibul Hassan Points 345

Aller à la base de données -> Règles :

Puis changé ci-dessous les règles

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

en dessous

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

76voto

rwozniak Points 128

Donc, dans mon cas, j'ai eu la suivante DB règles:

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
    }
  }
}

Comme vous pouvez le voir il y a un uid champ sur l' story document pour marquer le propriétaire.

Ensuite dans mon code j'ai été l'interrogation de toutes les histoires (Flutter):

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

Et il a échoué parce que j'ai déjà ajouté quelques histoires par l'intermédiaire de différents utilisateurs. Pour y remédier il faut ajouter une condition pour la requête:

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

Plus de détails ici: https://firebase.google.com/docs/firestore/security/rules-query

7voto

Anga Koko Points 597

En outre, vous pouvez obtenir cette erreur si la référence à la collection de votre code ne correspond pas au nom de la collection sur firebase.

Par exemple, le nom de la collection sur la base de feu est users , mais vous y faites référence avec db.collection("Users") ou db.collection("user")

Il est également sensible à la casse.

J'espère que cela aide quelqu'un

2voto

itzhar Points 36

assurez-vous que votre base de données n'est pas vide ni que votre requête concerne des collections qui n'existent pas

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X