Правило безопасности Firestore не работает - PullRequest
0 голосов
/ 24 августа 2018

В моем Firestore есть следующее правило

service cloud.firestore {
      match /databases/{database}/documents {
        match /users/{userId}/{documents=**} {
          // Only the authenticated user who authored the document can read or write
          allow read: if request.auth.uid == userId;
          allow write;
        }
      }
    }

, которое, похоже, не работает, и я использую Rest API для получения данных. Для аутентификации я звоню: https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPassword?key=[API_KEY]

После аутентификации мы получаем idToken и передаем в качестве заголовка авторизации следующий URL https://firestore.googleapis.com/v1beta1/projects//databases/(default)/documents/users

В коллекции пользователей в качестве имени документа указан идентификатор, а значением является просто набор фиктивных ключей.

Когда я запускаю клиент, я получаю сообщение об ошибке:

{u'status ': u'PERMISSION_DENIED', u'message ': u'Missing или недостаточно прав.', U'code ': 403}

Если я жестко закодировал значение идентификатора пользователя, он работает.Таким образом, значение, возвращаемое в {userid}, похоже, не соответствует UID по какой-то причине.

Может кто-нибудь помочь с расшифровкой, почему это происходит?

Спасибо, Рамс

1 Ответ

0 голосов
/ 24 августа 2018

вам не нужен документ = ** селектор

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

    // Make sure the uid of the requesting user matches name of the user
    // document. The wildcard expression {userId} makes the userId variable
    // available in rules.
    match /users/{userId} {
      allow read, update, delete: if request.auth.uid == userId;
      allow create: if request.auth.uid != null;
    }
  }
}

https://firebase.google.com/docs/firestore/security/rules-conditions

...