2 votes

(Nuxtjs+ Firebase Firestore) FirebaseError : Permissions manquantes ou insuffisantes

J'utilise Nuxt.js + Firebase Firestore et j'essaie d'obtenir des données à partir d'une collection dont le nom est TestCollection mais le résultat est le suivant

Erreur dans l'obtention du document : FirebaseError : Permissions manquantes ou insuffisantes.

here is my firestore collection.

mon localhost affiche ceci.

Error getting document: FirebaseError: Missing or insufficient permissions.
    at new n (prebuilt-306f43d8-45d6f0b9.js?a6a6:188)
    at eval (prebuilt-306f43d8-45d6f0b9.js?a6a6:10426)
    at eval (prebuilt-306f43d8-45d6f0b9.js?a6a6:10427)
    at n.onMessage (prebuilt-306f43d8-45d6f0b9.js?a6a6:10449)
    at eval (prebuilt-306f43d8-45d6f0b9.js?a6a6:10366)
    at eval (prebuilt-306f43d8-45d6f0b9.js?a6a6:10397)
    at eval (prebuilt-306f43d8-45d6f0b9.js?a6a6:15160)
    at eval (prebuilt-306f43d8-45d6f0b9.js?a6a6:15218)

voici la méthode qui appelle la collection.

async testPost(){
      try{
         await this.$fire.firestore.collection('TestCollection').get()
          .then((docs) => {
            console.log('docs:', docs)
          if (docs) {
            docs.forEach((doc) => {
              console.log(doc.data())
            })
          } else {
            console.log('No such document!')
          }
        }).catch((error) => {
          console.log('Error getting document:', error)
        })
      }catch (err){
        console.log(err)
      }
    },

dans nuxt.config.js

modules: [
    // https://go.nuxtjs.dev/axios
    '@nuxtjs/axios',
    ['@nuxtjs/firebase', {
      config: {
        apiKey: process.env.FIREBASE_API_KEY,
        authDomain: process.env.FIREBASE_AUTH_DOMAIN,
        projectId: process.env.FIREBASE_PROJECT_ID,
        storageBucket: process.env.FIREBASE_STORAGE_BUCKET,
        messagingSenderId: process.env.FIREBASE_MESSAGING_SENDER_ID,
        appId: process.env.FIREBASE_APP_ID,
        measurementId: process.env.FIREBASE_MEASUREMENT_ID,
      },

      services: {
        firestore: true,
        storage: true,
        database: true,
      },
    }],
  ],

dans database.rules.json

{
  "rules": {
    "users": {
      "$uid": {
        ".read": "$uid === auth.uid",
        ".write": "false"
      }
    },
    "cases": {
      ".read": true
    }
  }
}

dans filetore.rules

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

1voto

Frank van Puffelen Points 16029

Vos règles de sécurité n'autorisent personne à lire les données de Firestore :

match /{document=**} {
  allow read, write: if false;
}

Ainsi, le fait que votre code qui tente de lire les données de la base de données soit rejeté par ces règles fonctionne comme prévu.

Il s'agit des règles par défaut, aussi je vous recommande vivement de lire la documentation sur la sécurisation de votre base de données pour Firestore en particulier et pour Firebase en général .


Vous voudrez commencer par la modification minimale de vos règles qui permet à votre code de fonctionner, connue sous le nom de le principe du moindre privilège . Vu le code que vous avez partagé, ce serait :

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if false;
    }
    match /TestCollection/{doc} {
      allow read: if true;
    }
  }
}

Donc maintenant, nous permettons à n'importe qui dans le monde de lire la totalité TestCollection car c'est ce que votre code semble faire, mais nous interdisons toujours toutes les autres opérations.

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