Неперехваченная ошибка в onSnapshot: Ошибка FirebaseError: Отсутствуют или недостаточно разрешений. Правила включали

# #javascript #firebase #google-cloud-firestore #firebase-security

Вопрос:

Я знаю, что это проблема, которая возникает с правилами firebase для проекта, но я не знаю, почему это происходит. Я пытаюсь получить снимок документов, которые в настоящее время находятся внутри пути, но я получаю ошибку разрешения firebase

Вот код, обратите внимание, что это использует nuxt vue, я только начинаю работать с фреймворком, так что это может быть странно, но, насколько я понимаю, это должно работать:

 mounted(){
      this.getPosts();
    },
    methods:{

      getPosts(){
        database.collection('blog').doc('yP6aYXvisFbTsqtQ3MEfuyz6xYE3').collection('posts').onSnapshot(snapshot =>{
          console.log(snapshot)
        })
      }
    }
 

И таковы правила:

 match /blog {
      allow read;
      allow write: if request.auth.uid == 'BoTJcdHh9ogYZUWEaKWbEkuPzTJ2'
    }
 

Я понимаю, что все, что находится на этом пути, должно быть доступно для чтения, но ошибка разрешения все еще отображается.

Ответ №1:

Вам нужно установить правило на уровне документа, а не коллекции.

Так, например:

 match /blog/{blogId}/posts/{postId}  {
        allow read;
    }
 

Из документации:

Все утверждения о совпадении должны указывать на документы, а не на коллекции. Оператор соответствия может указывать на определенный документ, как в match /cities/SF, или использовать подстановочные знаки для указания на любой документ по указанному пути, как в match /cities/{город}.

Подробнее читайте здесь: https://firebase.google.com/docs/firestore/security/rules-structure