Ограничить доступ к Firestore авторизованным пользователям - PullRequest
0 голосов
/ 04 февраля 2019

Каково действительное правильное условие для использования в правилах Firestore, чтобы ограничить доступ только для аутентифицированных пользователей?Официальные документы и несколько ответов здесь говорят, что вы должны использовать request.auth.uid != null.Я использовал это в прошлом, и, похоже, это сработало, но недавно, когда я тестировал некоторые другие правила в симуляторе, я заметил, что он выдает Null value error при таком условии, когда запрос не аутентифицирован.

Если это так, кажется, что request.auth != null - это фактическое условие, которое вы должны использовать, поскольку оно выглядит так, как оно должно работать в симуляторе.

Является ли это несоответствием между симулятором и фактическим поведениемправила?Если симулятор верен, я предполагаю, что условие request.auth.uid != null только «работает», потому что по умолчанию поведение запрещает доступ, если в условии есть ошибка.Другой вариант заключается в том, что симулятор неверен и request.auth никогда не равен null при фактическом использовании базы данных.

Что это?

1 Ответ

0 голосов
/ 05 февраля 2019

Я провел некоторое тестирование с несколькими различными условиями и обнаружил, что моя гипотеза кажется верной - условие request.auth.uid != null «работает», потому что оно выдает ошибку, когда пользователь не аутентифицирован.Это, вероятно, не вызывает никаких проблем в большинстве сценариев, так как вы, вероятно, захотите в любом случае запретить доступ;однако, это вызывает проблему, если вы пытаетесь написать обратное условие request.auth.uid == null.Так как это приводит к ошибке при отсутствии проверки подлинности, это также приведет к правилу запрета доступа.

Мой вывод заключается в том, что документы технически неверны, и условие, которое следует использовать для проверки подлинности пользователя, равно * 1005.*.Вы можете увидеть результаты моих тестов ниже, с неправильным поведением, выделенным жирным шрифтом.

Тесты

Ограничение доступа, как описано в документах:

allow read, write: if (request.auth.uid != null);
  • Аутентифицировано - доступ разрешен
  • Не аутентифицирован - запрещен доступ

Альтернативное ограничение доступа:

allow read, write: if (request.auth != null);
  • Аутентифицировано - доступ разрешен
  • Не аутентифицирован - доступ запрещен

Обратное ограничение (условие документов):

allow read, write: if (request.auth.uid == null);
  • Аутентифицировано- доступ запрещен
  • не аутентифицирован - доступ запрещен

обратное ограничение (альтернативное условие):

allow read, write: if (request.auth == null);
  • Аутентифицировано - доступ запрещен
  • Не аутентифицирован - доступ разрешен
...