Блокировать запись пользователя в указанное поле c в таблице firebase - PullRequest
0 голосов
/ 19 июня 2020

Я пытаюсь понять, как заблокировать запись пользователей в поле имени пользователя в собственных данных (внутри пользователей). Как лучше всего сообщить об этом go? Думаю, мне нужно создать облачную функцию, чтобы проверить, не является ли имя пользователя уникальным, и только затем разрешить запись, но в настоящее время правила позволяют пользователю писать в любое поле в users.

enter image description here

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

1 Ответ

1 голос
/ 25 июня 2020

Вы пытаетесь проверить , действительно ли обновление, запрошенное пользователем, действительно или нет. Вы можете достичь этого с помощью .validate правил .

{
    "rules": {
        "users": {
            ".indexOn": "username",
            "username": {
                ".validate": "newData.val() === data.val()"
            },
            "$uid": {
                ".read": "auth != null",
                ".write": "auth.uid === $uid"
            }
        }
    }
}

Теперь эти запросы не будут выполняться

UPDATE
{
  username: 23,
  displayName: "frank"
}

.

UPDATE
{
  username: 37
}

Но они будут успешными

UPDATE
{
  username: 77,
  displayName: "doug"
}

.

UPDATE
{
  displayName: "Doug"
}

** ПРИМЕЧАНИЕ **: в случае, если вы создаете учетную запись пользователя на самой стороне клиента, то есть имя пользователя будет изначально предоставляется самим клиентом, то вышеуказанный запрос завершится ошибкой, поскольку имя пользователя не существует. Для этого вам может потребоваться изменить на:
".validate": "!data.exists() || newData.val() === data.val()" 
...