Первое, что вы должны сделать, это переместить логику отображения предупреждения об истечении срока действия внутри компонента, который всегда существует (скажем, header-component
), но активируется только после успешного входа в систему. Ваш компонент входа в систему устанавливает время истечения в localStorage после успешного входа в систему и устанавливает флаг, чтобы можно было инициализировать headerComponent
. Ваш компонент заголовка читает значение из localStorage
и запускает таймер.
showTokenExpiryAlert() {
/* Convert expiresIn (seconds) to expiresIn (miliseconds) */
const expiresIn = localStorage.getItem('expiresIn') * 1000;
/* calculate alert time from expiresIn (miliseconds) */
const alertTime = expiresIn - 300000;
if (alertTime > 0) {
/* Only show the alert if the token hasn't already expired */
setTimeout(() => {
alert('Token will be exppired soon');
}, alertTime);
}
else {
localStorage.removeItem('expiresIn'); // token already expired
// navigate to login
}
}
Не используйте SessionStorage вместо localStorage, это будет очищено при закрытии браузера.