Как проверить, не истек ли токен JWT в Angular 8 - PullRequest
0 голосов
/ 19 марта 2020

В Angular 8, какие существуют способы проверить, не истек ли токен JWT. Время истечения 1 час. рабочий код / ​​образцы будут высоко оценены.

Ответы [ 3 ]

0 голосов
/ 19 марта 2020

Я реализовал что-то подобное в своем приложении, и оно отлично работает:

this.userToken$.pipe(
            filter((token: AuthToken) => !!token),
            map((token: AuthToken) => token.expiresIn()),
            tap((expiresIn: number) => console.log('token expires in', expiresIn / 1000 / 60, 'minutes')),
            switchMap((expiresIn: number) => timer(expiresIn)),
        ).subscribe(() => {
            console.warn('token expires');
            this.logout();
        });

Таким образом, пользователь не выходит из системы, как только он пытается выполнить новый запрос, но как только истекает токен.

0 голосов
/ 19 марта 2020

Вариант 1 - Вручную

Время истечения токена кодируется в токене в формате UT C время . Таким образом, его можно получить и проверить вручную по текущему времени в UT C. Попробуйте следующий

private tokenExpired(token: string) {
  const expiry = (JSON.parse(atob(token.split('.')[1]))).exp;
  return (Math.floor((new Date).getTime() / 1000)) >= expiry;
}

ngOnInit() {
  if (this.tokenExpired(token)) {
    // token expired
  } else {
    // token valid
  }
}

Вариант 2 - Использование JwtHelperService

Вы можете использовать JwtHelperService s isTokenExpired() метод проверить, не истек ли токен.

import {JwtHelperService} from '@auth0/angular-jwt';
.
.
constructor(private jwtHelper: JwtHelperService) { }

ngOnInit() {
  if (this.jwtHelper.isTokenExpired(token)) {
    // token expired 
  } else {
    // token valid
  }
}
0 голосов
/ 19 марта 2020

Срок действия токена можно получить с помощью пакета Angular -JWT

 getTokenExpirationDate(token: string): Date {
    const decodedToken = helper.decodeToken(token);

    if (decodedToken.exp === undefined) { return null; }

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