【问题标题】:Periodically check for expired JWT in MEAN app在 MEAN 应用程序中定期检查过期的 JWT
【发布时间】:2017-12-23 18:51:32
【问题描述】:

我能够通过连接到 express API 的服务在 Angular 4 中创建登录组件。后端 API 返回一个 JWT 令牌,前端将令牌存储在本地存储中。问题是,令牌在后端过期,但本地存储令牌仍然存在。

在整个前端应用程序中,我检查用户是否已登录,如果已登录,则会显示不同的功能。如果令牌在后端过期,用户仍然可以尝试完成登录行为,因为令牌仍然存在于本地存储中,但服务器端不会允许这种情况发生。我想做的是定期检查服务器端的令牌以查看它是否已过期,每次我检查是否应根据this SO answer 启用仅登录功能之一时/p>

快递服务器路由似乎在 Postman 中运行良好(localhost:3000/users/token?token=veryLongTokenString):

// check for expired token
router.get('/token',function(req,res,next){
  "use strict";
  jwt.verify(req.query.token, 'secret', function(err){

    if (err) {
      return res.status(403).json({
        title: 'There is no valid token',
        status: res.statusCode,
        error: err
      })
    }
    res.status(200).json({
      message: 'Token is valid',
      token: token,
      userId: user._id
    })
  })
})

这就是我开始感到困惑的地方。我对 observables 的微弱掌握告诉我,我在服务 (auth.service.ts) 中返回了 .map:

isLoggedIn() {
    const token = localStorage.getItem('token')
      ? '?token=' + localStorage.getItem('token')
      : '';

    return this.http.get('/users/token' + token)
      .map( response => response.json())
  }

并通过.subscribe收听我的组件

  isLoggedIn() {
    return this.authService.isLoggedIn()
      .subscribe(x => {
        console.log(x)
        // if status is 200 then return true
        // if not then remove token from local storage?
      })
  }

此时它会返回一个 403 错误,但它会重复执行此操作,每分钟会累积数千个 403 错误。我猜我不应该使用.map/.subscribe 方法,而应该使用只检查一次的方法?

【问题讨论】:

标签: angular jwt mean-stack


【解决方案1】:

是否有必要实际 ping 服务器过期?到期日期是您令牌的一部分,只需在本地评估时间即可。

 import * as jwt_decode from 'jwt-decode';

 interface TokenDto {
   foo: string;
   exp: number;
   iat: number;
 }

 const sessionIdInfo: TokenDto = jwt_decode(localStorage.getItem('token'));
 const currentDate = moment();
 const current_ts: number = Math.floor(currentDate.valueOf() / 1000);
 if(current_ts > sessionIdInfo.exp)
  console.log("Token expired");

【讨论】:

    猜你喜欢
    • 2018-06-19
    • 2017-02-14
    • 1970-01-01
    • 2020-04-04
    • 2023-04-04
    • 2011-09-28
    • 1970-01-01
    • 2019-09-13
    • 2020-12-15
    相关资源
    最近更新 更多