web-dev-qa-db-fra.com

Comment vérifier si JWT Token est expiré en Angular 8

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é.

4
Pinnu

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

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.

0
Oscar Guérin

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
  }
}
0
Michael D