#angular #angular9 #angular-observable #angular-guards
#angular #angular9 #angular-наблюдаемый #angular-guards
Вопрос:
На некоторых страницах моего приложения Angular я хочу проверить, не истек ли срок действия сеанса.
У меня есть токен в локальном хранилище, поэтому в AuthService у меня есть:
isUserAuthenticated(): Observable<boolean> {
const token = localStorage.getItem('token');
if(token) {
return this.http.get<any>(this.apiUrl.getUser, {headers: {'X-Auth-Token': token}}).pipe(
tap(data => {return true}),
catchError(this.handleError)
);
} else {
return of(false);
}
}
Прежде всего: правильный ли приведенный выше код?
Как должна выглядеть моя функция canActivate?
Я попробовал это:
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot):Observable<boolean>|boolean {
return this.authService.isUserAuthenticated().pipe(map(User => {
return (User) ? true : false;
}));
}
но это выдает мне ошибку, когда срок действия токена истек.
Комментарии:
1. Возвращает ли ваш API 400, когда срок действия токена истек? Потому что тогда ваша логика перейдет к catchError и больше не будет возвращать логическое значение..
2. Да, он возвращает 401.
3. Правильно. Итак, ваш catchError должен возвращать значение (false) вместо перехода к HandleError .. верно?