Как написать основные правила базы данных в реальном времени для безопасности пользователей? - PullRequest
0 голосов
/ 15 октября 2019

Я пытаюсь реализовать пользовательскую защиту в моей базе данных Firebase Realtime.

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

Я проверил это в симуляторе правил БД в реальном времени, и я получил ошибочное чтение со следующими параметрами:

Location: /users
Authenticated: true
Provider: Anonymous
UID: "aLoBLejDJ5P4PDZkZhe2LTxO8x32" (tried with and without quotation marks)

Я получил "Имитация чтения запрещена" (без объяснения причин)но почему). То же самое происходит, когда я пытаюсь прочитать запрос REST HTTP GET («Ошибка: разрешение отклонено»).

Это моя структура БД:

{
  "users" : {
    "-LrAxMc5SANNe-p1Fd6n" : {
      "test" : "lol",
      "uid" : "aLoBLejDJ5P4PDZkZhe2LTxO8x32"
    }
  }
}

И эти правила таковыfar

{
  "rules": {
    "users" : {
      ".indexOn": "date",

      "$uid": {
        ".read" : "$uid === auth.uid",
        ".write" : "$uid === auth.uid",
      }
    }
  }
}

Ожидаемый результат состоял в том, чтобы получить данные пользователя THAT в ответе HTTP, вместо этого я получил вышеуказанные ошибки разрешения.

Будучи довольно новым для Firebase, я не знаю, чтопроблема в том, что если я неправильно понимаю / внедряю синтаксис правила или что-то еще.

Кроме того, uid, который я получил в ответе HTTP от регистрации (выше), выглядит очень по-другому по сравнению с образцом Uid образца I 'Вы видели в документации Firebase, не знаете, является ли это частью проблемы?

Единственный метод входа в мое приложение в настоящее время - это электронная почта + пароль.

1 Ответ

0 голосов
/ 15 октября 2019

Из того, как вы сформулировали свой вопрос, кажется, что вы думаете, что правила безопасности будут автоматически фильтровать данные. Это не так: правила безопасности гарантируют, что у пользователя есть разрешение на чтение данных, которые он пытается прочитать. Это происходит, когда вы присоединяете слушателя, и никак не основаны на реальных данных в вашей базе данных.

Подробнее об этом см. Раздел правила не являются фильтрами в документациинекоторые из многих предыдущих вопросов по теме и документация по безопасным запросам .


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

Чтобы прочитать данные текущего пользователя с вашими текущими правилами, прочитайте весь путь к данным этого пользователя:

/users/aLoBLejDJ5P4PDZkZhe2LTxO8x32

Чтобы разрешить чтение из узла /users, вы можете изменить свои правила следующим образом:

{
  "rules": {
    "users" : {
      ".indexOn": "date",
      ".read": "auth.uid != null",
      "$uid": {
        ".write" : "$uid === auth.uid",
      }
    }
  }
}

Но это позволит любому человеку читать все пользовательские данные.


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...