Можно ли получить новый токен Firebase ID при загрузке страницы? - PullRequest
0 голосов
/ 19 февраля 2020

Можно ли запускать 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) {
 //...
}

Я что-то здесь упускаю?

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