使用jwt检查令牌是有效还是无效

时间:2017-10-21 08:20:21

标签: angularjs node.js express

嘿,我在app中有一个小问题。我有中间件来检查下一个路由中的令牌,我使用tokne到isLoggedIn函数的角度来检查记录的用户。但是,如果我在本地存储中更改令牌,则仍会记录用户,因为令牌仍然存在但无效。你能帮助我如何从中间件响应令牌有效或无效,接下来以角度检查这个吗?问题:如何检查该令牌在角度中是有效还是无效?例如如果令牌无效则更改路由位置 请查看我的代码:

中间件

router.use(function(req, res, next){
var token = req.body.token || req.body.query || req.headers['x-access-token']  
  if(token){
     jwt.verify(token, secret, function(err,decoded){
        if(err){
           res.json({success:false, message:'Invalid token'})
        } else {
           req.decoded = decoded;
           next()
        }
     })
  } else {
     res.json({ success: false, message:'No token provided' });
  }
});

工厂

.factory('AuthToken', function($window){
  var authTokenFactory = {};
  authTokenFactory.setToken = function(token){
    if(token){
        $window.localStorage.setItem('token',token)
    } else {
        $window.localStorage.removeItem('token')
    }

  };
  authTokenFactory.getToken = function(){
    return $window.localStorage.getItem('token')
  }

  return authTokenFactory
})

isLoogedIn function

    authFactory.isLoggedIn = function(){
    if(AuthToken.getToken()){
        return true 
    } else {
        return false
    }
}
return authFactory

1 个答案:

答案 0 :(得分:0)

在前端角度创建一个函数来检查会话的有效性..它应该计算令牌和本地机器的时间戳,如果过期则为$ location.path添加函数([重定向位置])。 您工厂的示例

app.checksession = function() {
        if(Auth.isLoggedIn()) {
            app.isLoggedIn = true;
            var interval = $interval(function(){
                console.log('test');
                var storedToken = $window.localStorage.getItem('token');
                if(storedToken === null){
                    $interval.cancel(interval);
                } else {
                    self.parseJwt = function(token){
                        var tokenExp = storedToken.split('.')[1];
                        return JSON.parse($window.atob(tokenExp));
                    }
                    var parsedToken = self.parseJwt(storedToken);
                    var expireyTime = parsedToken.exp;
                    var timeStamp = Math.floor(Date.now()/1000);
                    var difference  = expireyTime - timeStamp;
                    console.log("the token expirey is: \n"+expireyTime+"\nthe current time stamp is:\n"+timeStamp+"\nthe difference is:\n"+difference);
                    if(difference <= 0) {
                        app.isLoggedIn = false;
                        app.triggerModal(); // change this to location.path function
                    }
                }
            }, 2000)
        }