Angular 8では、JWTトークンの有効期限が切れているかどうかを確認するためのさまざまな方法があります。有効期限は1時間です。実際のコード/サンプルは高く評価されます。
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;
}
私は私のアプリにこのようなものを実装しました、そしてそれはうまくいきます:
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();
});
このようにして、ユーザーが新しいリクエストを実行しようとした後、トークンの有効期限が切れるとすぐに、ユーザーはログアウトされません。
オプション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
}
}
_