У меня есть узел adminContent в моей базе данных Firebase, который должен быть доступен только для чтения/записи, если пользователь установил true как пользовательский запрос.
Следующий код показывает, что один из моих тестовых пользователей HAS admin установлен как true, а один тестовый пользователь НЕ НЕ (так что проблема, похоже, не правильная установка заявки):
/* Check if admin */
firebase.auth().currentUser.getIdTokenResult().then(function(idTokenResult) {
if (idTokenResult.claims.admin) {
// THIS PART IS EXECUTED
}
});
Это мои правила:
{
"rules": {
"metadata": {
"$user_id": {
// Read access only granted to the authenticated user.
".read": "$user_id === auth.uid",
// Write access only via Admin SDK.
".write": false
}
},
"adminContent": {
".read": "auth.token.admin === true",
".write": "auth.token.admin === true",
}
}
}
Оба тестовых пользователя (один с требованием администратора и один без) могут читать и писать в adminContent. И когда я тестирую симулятор по правилам на консоли Firebase с UID двух пользователей, никто не получает разрешения.
Структура данных выглядит следующим образом:
adminContent
adminEmails
announcements
metadata
...
users
...
Что-то не так с моими правилами? Почему симулятор и реальный сценарий отличаются?
Возможно, токен устарел, т.е. пользовательский запрос был установлен после того, как был выпущен маркер ID. Срок службы токена составляет 1 час. Таким образом, до следующего обновления токен не будет принимать последние претензии. Вы можете принудительно обновить его после того, как пользовательский запрос будет установлен путем вызова:
firebase.auth().currentUser.getIdTokenResult(true)...