Как запросить Firestore с клиента? - PullRequest
0 голосов
/ 23 сентября 2019

Я создаю правило безопасности для приложения Firebase с аутентификацией.

Я хочу, чтобы только пользователь мог иметь доступ к своему собственному пользовательскому документу.

У меня есть это правило безопасности:

  match /users/{uid} {
  allow read, update: if request.auth.uid == uid;
  allow create: if request.auth.uid != null;
  }

Но когда я запускаю код клиента, выдается ошибка:

[Firestore]: Статус {code = PERMISSION_DENIED, description = Отсутствует или недостаточно разрешений., Причина = null}

В коде клиента я проверяю, существует ли уже документ с пользовательским uid (если его нет, я записываю данные в firestore):

final QuerySnapshot result = await Firestore.instance
    .collection('users')
    .where('uid', isEqualTo: user.uid)
    .getDocuments();
documents = result.documents;
if (documents.isEmpty) {
…

Почему я получаю эту ошибку?

Я прочитал https://firebase.google.com/docs/firestore/security/rules-query и там написано, что db.collection("stories").where("author", "==", user.uid).get() действительно.

Ответы [ 2 ]

0 голосов
/ 23 сентября 2019

Ваш запрос не соответствует вашим правилам.Запрос запрашивает все документы, в которых поле документа uid совпадает с user.uid.Но ваше правило разрешает доступ для чтения к документам с идентификатором документа, идентичным UID пользователя.Это не одно и то же.Запрос имеет дело с полем документа с именем uid, а правила - с идентификатором документа .Запрос и правило должны совпадать.Поскольку вы ничего не сказали о структуре ваших документов или о том, что конкретно вы пытаетесь достичь, невозможно рекомендовать и альтернативы.В любом случае ваш запрос должен соответствовать правилу, иначе он будет каждый раз отказывать.

0 голосов
/ 23 сентября 2019

Похоже, что ваш пользователь не прошел аутентификацию при выполнении этого запроса. Вы уверены, что реализовали механизм аутентификации +, который сначала аутентифицировал пользователя?

...