在Angular中验证JWT的最佳实践(检测令牌更改)

时间:2018-02-18 13:03:38

标签: angular

我有一个非常基本的属性来检查令牌是否已过期:

  get isExpired():boolean {
      return !!localStorage && 
             !!localStorage.getItem("token") && 
             !this.jwt.isTokenExpired(localStorage.getItem("token"));
  }

以角度观看此属性的最佳做法是什么?

这可能不是最好的做法,但在AngularJs中我可以使用$scope.$watch

在Angular 4中有没有类似的方法来实现相同的功能?

提前致谢!

1 个答案:

答案 0 :(得分:0)

我看到了不同的解决方案

  1. 使用警卫检查每次路线更改时的令牌到期日期 https://angular.io/guide/router#milestone-5-route-guards

  2. 创建一个每秒检查一次令牌到期的服务,

    Observable
        .interval(1000)
        .timeInterval()
        .flatMap(() => 
             this.authenticationService.isTokenExpired())
        .filter(isExpired => isExpired) 
        .subscribe(isExpired => {
            this.router.navigateByUrl("/login")
        });
    
  3. 这假定this.authenticationService.isTokenExpired()返回Observable<boolean>