如何在 Angular 8 中检查 JWT 令牌是否已过期

Pin*_*nnu 6 angular jwt-auth

在 Angular 8 中,有哪些不同的方法可以检查 JWT 令牌是否已过期。到期时间为1小时。工作代码/示例将不胜感激。

Mic*_*l D 17

选项 1 - 手动

令牌到期时间以UTC 时间格式编码在令牌中。因此,可以根据 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
  }
}
Run Code Online (Sandbox Code Playgroud)

选项 2 - 使用 JwtHelperService

您可以使用JwtHelperService'sisTokenExpired()方法检查令牌是否已过期。

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

ngOnInit() {
  if (this.jwtHelper.isTokenExpired(token)) {
    // token expired 
  } else {
    // token valid
  }
}
Run Code Online (Sandbox Code Playgroud)

  • @Southstar:快速浏览一下“isTokenExpired()”的源代码就会发现它与手册的实现或多或少相同。我使用它是一个自己的意见和方便的问题。 (2认同)

par*_*ima 4

您可以使用 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;
  }
Run Code Online (Sandbox Code Playgroud)