In Angular 8 Quelles sont différentes façons de vérifier si le jeton JWT a expiré. L'heure d'expiration est 1 heure. Code de travail/échantillons sera très apprécié.
Vous pouvez obtenir une date d'expiration de jeton avec un package angulaire-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;
}
J'ai mis en œuvre quelque chose comme ça dans mon application et ça marche bien:
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();
});
De cette façon, l'utilisateur n'est pas déconnecté une fois qu'il tentait d'exécuter une nouvelle demande, mais dès que le jeton expire.
Option 1 - Manuel
Le temps d'expiration de jeton est codé dans le jeton dans UTC Time Format. Il peut donc être récupéré et vérifié manuellement contre l'heure actuelle en UTC. Essayez ce qui suit
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
}
}
Option 2 - Utilisation JwtHelperService
Vous pouvez utiliser le JwtHelperService
's isTokenExpired()
méthode pour vérifier si le jeton a déjà expiré.
import {JwtHelperService} from '@auth0/angular-jwt';
.
.
constructor(private jwtHelper: JwtHelperService) { }
ngOnInit() {
if (this.jwtHelper.isTokenExpired(token)) {
// token expired
} else {
// token valid
}
}