не может создать новых детей в базе данных Firebase после установки правил - PullRequest
0 голосов
/ 20 октября 2018

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

это правила записи узла:

".write":"auth.uid == \"DFhNb28506Y345CpJ3Ye7DQNn713\" || ((newData.exists() && !data.exists()) || auth.token.email == data.child(\"userEmail\").val())",

Я думаю, чтоnewData.exists() && !data.exists() должно позволять пользователям записывать в базу данных, но этого не произошло

это правила для узла пользователей:

    "users":{
  ".write":"auth.uid == \"DFhNb28506Y345CpJ3Ye7DQNn713\" || ((newData.exists() && data.child(\"userEmail\").val() != null) || auth.token.email == data.child(\"userEmail\").val())",
  ".read": "auth != null"
}

Структура базы данных выглядит следующим образом:

-users
     -user1
          -userName, userEmail ....
     -user2
          -userName, userEmail .....

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

это структура базы данных:

enter image description here

1 Ответ

0 голосов
/ 21 октября 2018

Хорошо, я думаю, вы создаете дополнительные ненужные шаги проверки.

Сначала

С ".read": "auth != null" на вашем users root ,каждый пользователь может получить доступ к данным другого пользователя, поэтому мы должны адресовать доступ для каждого пользователя индивидуально .

Второй

Если вы просто хотите разрешить аутентификацию пользователейчтобы написать и прочитать собственное содержимое, вы можете удалить эти дополнительные ((newData.exists() && !data.exists()) и auth.token.email == data.child(\"userEmail\").val()) шаги.

Совет: это ((newData.exists() && !data.exists()) сравнение означает точно: Пишите здесь, если вы отправляете что-либо но в этом запрошенном «пути» ничего не должно быть написано. Вы должны подумать о необходимости этого, так как Я не знаю ваших точных вариантов использования .

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

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

{
  "rules": {
    ".write":"auth.uid == \"DFhNb28506Y345CpJ3Ye7DQNn713\",
    ".read": "auth.uid == \"DFhNb28506Y345CpJ3Ye7DQNn713\",
    "users": {
      "$uid": {
        ".read": "$uid === auth.uid",
        ".write": "$uid === auth.uid"
      }
    }
  }
}
...