Правила безопасности базы данных Firebase без аутентификации пользователя - PullRequest
0 голосов
/ 11 марта 2020

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

Мои JSON данные выглядят так:

{
  "Rand3435" : {
    "Score" : 10,
    "DID" : "Rand3435",
    "CanDance" : "No"
  },
  "Rand7765" : {
    "Score" : 25,
    "DID" : "Rand7765",
    "CanDance" : "Yes"
  },
  "Rand6769" : {
    "Score" : 0,
    "DID" : "Rand6769",
    "CanDance" : "No"
  },
  "Rand1326" : {
    "Score" : 10,
    "DID" : "Rand1326",
    "CanDance" : "No"
  },
  "Rand9879" : {
    "Score" : 10,
    "DID" : "Rand9879",
    "CanDance" : "Yes"
  },
  "Rand5455" : {
    "Score" : 10,
    "DID" : "Rand5455",
    "CanDance" : "No"
  },
  "Rand2322" : {
    "Score" : 19,
    "DID" : "Rand2322",
    "CanDance" : "No"
  }
}

Какие будут правила в JSON формат для размещения в разделе правил?

Пожалуйста, помогите, я новичок в Firebase. Спасибо

Ответы [ 2 ]

0 голосов
/ 11 марта 2020

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

FirebaseAuth.getInstance().signInAnonymously();

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


Если вы настаиваете на создании собственных идентификаторов, вы можете убедитесь, что только тот, кто знает идентификатор, может написать документ с таким идентификатором с:

{
  "rules": {
    ".read": false,
    "$DID": {
      // anyone who knows a DID can read its contents
      ".read": true, 

      // anyone who knows a DID can write its contents, as long as they specify the DID in the contents too
      ".write": "newData.child('DID').val() === $DID"
    }
  }
}

Таким образом, пользователь должен указать один и тот же идентификатор как в свойстве DID, так и в пути, чтобы это было разрешено написать. Поскольку у root нет разрешения на чтение, у кого-то нет возможности получить список всех данных (и, следовательно, всех DID).

0 голосов
/ 11 марта 2020
  1. Сохранять уникальный идентификатор в общих настройках при первом запуске приложения.
  2. Всякий раз, когда пользователь хочет внести какие-либо изменения в базу данных, проверьте, присутствует ли уникальный идентификатор в базе данных.
  3. Если присутствует уникальный идентификатор, пользователь может изменять данные, в противном случае - нет.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...