У меня есть два компонента: HomeComponent
, который охраняется AuthGuard, и LoginComponent
, который не имеет никакой защиты.
Когда я звоню logout()
из HomeComponent
, я уничтожаютокен от localStorage
и вызов this.router.navigate(['/login'])
.Это перенаправляет меня на LoginComponent
только на долю секунды;и тогда мое приложение работает так, как будто я пытался вызвать HomeComponent
напрямую и, таким образом, снова вызвать функцию canActivate()
, что приводит к полной перезагрузке приложения.
Вот части моего кода:
Функция выхода из системы
logout() {
// remove user from local storage to log user out
localStorage.removeItem('currentUser');
this.router.navigate(['/login']);
this.currentUserSubject.next(null);
}
app.routing.ts
{ path: 'login', component: LoginComponent },
{ path: '', component: HomeComponent, canActivate: [AuthGuard] },
Мой AuthGuard canActivate()
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
const currentUser = this.authenticationService.currentUserValue;
if (currentUser) {
// authorised so return true
return true;
}
// not logged in so redirect to login page with the return url
this.router.navigate(['/login'], { queryParams: { returnUrl: state.url }});
return false;
}
Я ожидаю, что приложение не будет перезагруженои это просто идет к /login
.Как мне этого добиться?
РЕДАКТИРОВАТЬ 1 Я пытался создать мини-версию своего приложения в stackblitz здесь .Я новичок в Angular, поэтому у меня не было проблем с воссозданием этой проблемы.После нажатия кнопки входа в демонстрационную версию создается элемент localStorage, но маршрутизатор не переходит на /
.Я прошу вас удалить часть /login...
из URL браузера и нажать Enter, чтобы перезагрузить страницу.Вы увидите, как приложение ведет себя.Попробуйте выйти и увидеть проблему.