我的角度应用程序上有一个拦截器,请求完成后我需要查看响应头,目前,我正在这样做
return next.handle(copy).do((event: any) => {
if (event && event.headers && event.headers.get('x-token')) {
console.log('\ndelaying', event.headers.get('x-token'));
const authService = this.authService;
setTimeout(function () {
console.log('\ndelayed', event.headers.get('x-token'));
const token = event.headers.get('x-token');
authService.setJWT(token);
}, 1000 * 3); // delay
}
}, error => {
if (error && error.status === 401) {
this.authService.logout();
this.router.navigateByUrl('/login');
}
});
}
收到响应后,我正在检查标题。如果X令牌是从服务器发送的,我将用我收到的新令牌替换它来更新我应用的JWT
现在这是我的REST API服务器上拥有的中间件
module.exports = {
refreshToken: (req, res, next) => {
let reQtoken = req.get('authorization') ? req.get('authorization') : req.query.token;
verifyJWT(reQtoken)
.then((decodedToken) => {
//var current_time = new Date().getTime() / 1000;
const tokenDate = moment.unix(decodedToken.iat);
const diff = moment().diff(tokenDate, 'minutes');
console.log('\n',reQtoken);
console.log(tokenDate,diff, moment());
if (diff > 3) {
console.log('here');
const token = createJWTToken({
username: decodedToken.username,
person_id: decodedToken.person_id
});
res.set({
'x-token': token,
'Access-Control-Expose-Headers': 'x-token'
});
}
next()
})
.catch((err) => {
res.status(status.UNAUTHORIZED)
.json({
message: "Invalid auth token provided.",
err: err
})
});
}
};
我可能正在做一些愚蠢的事情,但我无法弄清楚。请从下面的角度应用查看日志
即使我的服务器没有发送响应,它也始终有一个JWT,因为它仅在创建的JWT与当前时间之间的时间差超过3分钟时才发送,因此它可能正在缓存中,或者我正在接收它一种错误的方式,因为在日志中有时是我在几个小时前创建的JWT,请提出解决方案