Можно ли запускать user.getIdToken(true)
каждый раз, когда страница загружается впервые или когда пользователь нажимает кнопку браузера sh? Любые проблемы с производительностью, безопасностью или другие проблемы, о которых мне следует знать?
Подробнее
Я полагаюсь на пользовательские утверждения для обработки пользовательских ролей. Как предложил Дуг в своем Medium post , я удостоверился, что получил новый токен ID с user.getIdToken(true)
:
let lastCommitted
function onNewClaims(snapshot) {
const data = snapshot.data()
console.log('New claims doc\n', data)
if (data._lastCommitted) {
if (lastCommitted &&
!data._lastCommitted.isEqual(lastCommitted)) {
// Force a refresh of the user's ID token
console.log('Refreshing token')
currentUser.getIdToken(true)
}
lastCommitted = data._lastCommitted
}
}
Но, насколько я понимаю, этот фрагмент запускается только тогда, когда пользователи в настоящее время в приложении. Если заявки обновляются, когда пользователи отсутствуют (например, закрытые вкладки), они не будут получать новые обновления. Я просмотрел документы и не смог найти каких-либо рекомендаций относительно getIdToken
.
Поскольку токен ID длится час и обновляется, когда пользователи выходят из системы и возвращаются обратно, я чувствую, что делаю что-то не так с принудительным обновлением токена ID слишком часто. (Потенциально пользователи могут нажимать refre sh 5-100 или более раз, и токен ID обновляется каждый раз)
Edit
Вот пример использования: приложение для управления проектами (например, Trello), где пользователи могут принадлежать к различным рабочим областям команды. Администраторы могут приглашать пользователей или назначать им разные роли. Роли затем сохраняются как пользовательские утверждения отдельных пользователей (например, [teamId]: "member").
Если пользователи в настоящее время находятся в приложении, user.getIdToken
вызывается при обновлении утверждений. (Например, администратор меняет роль пользователей с «член» на «администратор») Но если пользователи не в приложении, ничего не вызывается. Когда они возвращаются, их претензии в Firestore do c обновляются ("admin"), когда их фактических претензий нет ("участник") из-за принудительного refre sh logi c не запускается при загрузке страницы.
Насколько я понимаю, auth.onIdTokenChanged
никогда не вызывается, потому что user.getIdToken
(принудительное обновление sh на клиенте) не ' Во-первых, тебе не позвонят. Поэтому я подумал, что это может иметь больше смысла:
const updated = lastCommitted && !data._lastCommitted.isEqual(lastCommitted)
let loaded = false // set to true when app starts/restarts (page refresh)
// Instead of this
if (updated) {
//...
}
// Do this?
if (!loaded || updated) {
//...
}
Я что-то здесь упускаю?