Angular 9: защита, которая вызывает API, чтобы проверить, не истек ли срок действия сеанса

#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 .. верно?