Я попытался использовать функцию 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
})