Cloud Firestore - по-прежнему появляется сообщение об ошибке «любой пользователь может записать в вашу базу данных» - PullRequest
1 голос
/ 27 марта 2019

Я добавил правила в свою базу данных Cloud Firestore, но все еще получаю следующие сообщения об ошибках:

  • любой пользователь может прочитать всю вашу базу данных
  • любой пользователь может написать всю вашу базу данных

См. Правила ниже.

enter image description here

Действительно, любой пользователь может читать и записывать в коллекцию «users», иначе я не смогу войти / зарегистрировать пользователя. Как решить проблему?

Спасибо

1 Ответ

2 голосов
/ 27 марта 2019

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

service cloud.firestore {
  match /databases/{database}/documents {

    // Ensure the user is authenticated
    function userIsAuthenticated() {
        return request.auth != null && request.auth.uid != null
    }

    // Ensure the user owns the existing resource
    function userOwnsResource() {
        return userIsAuthenticated() && request.auth.uid == resource.data.userId
    }

    // Ensure the user owns the new resource
    function userOwnsNewResource() {
      return userIsAuthenticated() && request.auth.uid == request.resource.data.userId 
    }

    match /users/{userId=**} {
      allow read, update, delete: if userOwnsResource();
      allow create: if userOwnsNewResource();
    }
  }
}

userOwnsResource проверяет, что пользователь может получить доступ к существующему ресурсу.userOwnsNewResource проверяет, могут ли они создать новый документ для своего идентификатора пользователя.Очевидно, что вы можете повторно использовать эти функции в других правилах, что удобно.

...