дата истечения срока действия декодированного токена из firebase по сравнению с Date.now () - PullRequest
1 голос
/ 02 августа 2020

Я использую пакет jwtDecode для декодирования firebase refre sh -token, поэтому я получаю такой объект:

aud: "app name"
auth_time: 1596323784
email: "any email"
email_verified: false
exp: 1596327384
firebase: {identities: {…}, sign_in_provider: "password"}
iat: 1596323784
iss: "https://securetoken.google.com/app name"
user_id: "8mV0nvPuv3ctsZxegS5Sz4uwshP2"

Я хочу всегда сравнивать дату истечения срока с Date.now() поэтому, когда срок действия токена истекает, пользователь перенаправляется на страницу входа , но меня смущает то, что Date.now() имеет большее значение, чем exp*1000 токена fre sh,

if(decodedToken.exp * 1000 > Date.now()) {
 authenticated = true
} else {
  authenticated = false;
  window.location.href="/login"
}

теперь этот фрагмент кода вызывает перенаправление страницы каждую секунду на страницу входа и никогда не попадает на домашнюю страницу, и мне нужно изменить > на <</strong>, что для меня противоречит интуиции .

Значение даты истечения срока действия не должно быть больше возвращаемого значения Date.now () до истечения срока действия токена

1 Ответ

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

Это может быть просто целочисленная ошибка переполнения - попробуйте вместо этого записать ее так:

if(decodedToken.exp  > Math.floor(Date.now() / 1000) {
}

Однако считывать время истечения срока действия токенов - не лучшая практика, поскольку токены могут быть отклонены API для других причины, такие как отзыв и разница часов между клиентом и сервером.

Это работает лучше:

  • Срок действия токена доступа истек, когда от API получен статус 401
  • Затем вы пытаетесь обновить sh токен доступа на сервере авторизации - затем повторите вызов API с новым токеном доступа
  • В конце концов refre sh завершится ошибкой, и в этом случае сервер авторизации вернется код ошибки invalid_grant
  • Этот код ошибки означает конец сеанса, и затем вам нужно перенаправить пользователя для повторного входа

Вот пример кода в моем примере React, чтобы сравнить с:

...