Кажется, глупый вопрос, но я почему-то не могу понять ответа.
У меня есть защита аутентификации, которая проверяет истечение срока действия токена JWT, хранящегося в локальном хранилище, и выдает диалоговое окно «Срок действия вашего сеанса истек», который перенаправляет пользователя на вход onClose.
В текущем состоянии диалоговое окно выдается только в том случае, если в браузере есть этот токен в хранилище; в противном случае он напрямую перенаправляется на страницу входа.
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot): boolean {
if (!this._auth.isAuthenticated()) {
if (this._auth.hasToken()) {
this._dialogService.openErrorDialog('Your session has expired, please re-login', 0)
.afterClosed()
.subscribe(() => this.navigateToLogin(state.url));
} else {
this.navigateToLogin(state.url);
}
return false;
}
return true;
}
Я хочу реализовать следующую логику: срок действия токена истек, когда пользователь просматривал какую-то страницу приложения -> пользователь перешел на другую страницу -> диалоговое окно запущено -> перенаправление для входа в систему; но если пользователь переходит на какую-либо страницу в приложении из извне, он должен перенаправить его прямо на страницу входа, без вывода диалогового окна, даже если в локальном хранилище браузера уже есть просроченный токен.
Я пытался взломать некоторые решения, основанные на this, но это не сработало - хотя я могу вернуть Observable<boolean>
из функции canActivate я не мог понять, как заставить rxjs map
работать с результатами pairwise
, поэтому я мог использовать факт существования предыдущего URL-адреса, чтобы определить, откуда пришел пользователь.
Любая помощь очень ценится.
app.component
или в другое место, которое пользователь инициализирует один раз при входе в ваше приложение. - person Stavm   schedule 26.11.2019