Angular 7 - AuthGuard не работает при обновлении браузера - PullRequest
0 голосов
/ 25 октября 2019

У меня проблема с AuthGaurd для стекового приложения MEAN. AuthGaurd canActivate отлично работает, когда я перемещаюсь по ссылке на страницу. Но при обновлении страницы - страница не работает (остается состояние загрузки в течение бесконечного времени)

Вот реализация AuthGuard -

@Injectable()
export class AuthGuard implements CanActivate {
  constructor(@Inject(PLATFORM_ID) private platform: any, private router: Router, private logInService: LoginService) { }

  canActivate(route: ActivatedRouteSnapshot): boolean | Observable<boolean> | Promise<boolean> {
        if (isPlatformBrowser(this.platform)) {
            if (this.logInService.loggedIn && !this.logInService.isTokenExpired(this.logInService.getToken())) {
                return true;
            }

            this.router.navigate(['/user/login']);
            return false;
        }
    }
}

Вот мой сервис входа в систему, который также работает нормально -

public get loggedIn(): boolean {
    if (isPlatformBrowser(this.platform)) {
      return (localStorage.getItem(TOKEN_NAME) !== null);
    }
  }

isTokenExpired(token?: string): boolean {
    if (isPlatformBrowser(this.platform)) {
      if(!token) token = this.getToken();
      if(!token) return true;

      const date = this.getTokenExpirationDate(token);
      if(date === undefined) return false;
      return !(date.valueOf() > new Date().valueOf());  
    }
  }

getTokenExpirationDate(token: string): Date {
    const decoded = jwt_decode(token);

    if (decoded.exp === undefined) return null;

    const date = new Date(0);
    date.setUTCSeconds(decoded.exp);
    return date;
  }

Я не могу понять проблему. Заранее спасибо!

1 Ответ

0 голосов
/ 25 октября 2019

У вас есть ошибки?

Я полагаю, что проблема в том, что вы не обрабатываете, что происходит, если

if (isPlatformBrowser(this.platform)) возвращает ложь.

...