web-dev-qa-db-ja.com

Angular 8でJWTトークンの有効期限が切れているかどうかを確認する方法

Angular 8では、JWTトークンの有効期限が切れているかどうかを確認するためのさまざまな方法があります。有効期限は1時間です。実際のコード/サンプルは高く評価されます。

1
Pinnu

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;
  }
1
parrycima

私は私のアプリにこのようなものを実装しました、そしてそれはうまくいきます:

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
Oscar Guérin

オプション1-手動

トークンの有効期限は、トークンで TC時間 形式でエンコードされます。そのため、UTCで現在の時刻を取得して手動で確認できます。以下をお試しください

_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の-​​ isTokenExpired() メソッドを使用して、トークンの有効期限がすでに切れているかどうかを確認できます。

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

ngOnInit() {
  if (this.jwtHelper.isTokenExpired(token)) {
    // token expired 
  } else {
    // token valid
  }
}
_
0
Michael D