Правила безопасности Firestore: как получить доступ к токенам / пользовательским утверждениям аутентификации - PullRequest
0 голосов
/ 01 августа 2020

Я попытался использовать функцию isAdmin в своих правилах Firestore:

function isAdmin() {
    return request.auth.token.admin == true;
    // return request.auth.token.claims.admin == true; <--- I also tried
}

Но при использовании симулятора я получаю ошибку:

Ошибка: строка simulator.rules [ 35], столбец [13]. Свойство admin для объекта не определено.

Я уверен, что у этого пользователя, которого я имитирую, установлен токен администратора, потому что я проверяю его на интерфейсе, и там он работает нормально.

Почему мои правила недействительны?

Изменить: это код, который я использую во внешнем интерфейсе (Angular)

  return this.auth.authState.pipe(
    take(1),
    switchMap(async (authState) => {
        if (authState) {
            const token = await authState.getIdTokenResult()
            print(token)  // log below
            if (!token.claims.admin) {
                this.router.navigate(['/auth'])
                return false
            } else {
                return true
            }
        } else {
            this.router.navigate(['/auth'])
            return false
        }
    }),
  )

Это поле claims при регистрации токена результат:

claims:
  admin: true
  auth_time: 1596310796
  email_verified: false
  exp: 1596314396
  firebase: {identities: {…}, sign_in_provider: "password"}
  iat: 1596310796
  sub: "OuoqWiPJNUSm8x5erL0Kh6ybHX93"
  user_id: "OuoqWiPJNUSm8x5erL0Kh6ybHX93"

Вот как я установил пользовательское утверждение в админке sdk

  return admin.auth().setCustomUserClaims(user.uid, {
    admin: true
  })

1 Ответ

1 голос
/ 02 августа 2020

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

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

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