嘿,我在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
答案 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)
}