【发布时间】:2016-01-10 08:07:24
【问题描述】:
我正在使用"jsonwebtoken": "^5.4.0",我的令牌无法过期
我使用以下命令创建令牌:
var token = jwt.sign(user, app.get('superSecret'), {
expiresInSeconds: 1
});
我的令牌就像
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJfaWQiOiI1NjFhODE5MjFhZGJmYWI2MzNlZWU4ZjciLCJ1c2VybmFtZSI6ImJhcm5vIiwicGFzc3dvcmQiOiIkMmEkMTAkcnh6SHY0dFFhbkxwVDNQOEVJSzNBTzVhLjcwNUJZdmxIOVhXOHlSVmpUMi9hNEdmTFd4YU8iLCJfX3YiOjAsImNyZWF0ZWRfYXQiOiIyMDE1LTEwLTExVDE1OjM0OjQyLjg3MFoifQ.ooELWBRlxtYwFTmJDFNOLiR6-2uR_-wjjXwPnS0c5Lk
在我的中间件中我有这个检查
jwt.verify(token, app.get('superSecret'), function (err, decoded) {
if (err) {
return res.json({success: false, message: 'Failed to authenticate token.'});
} else {
console.dir(decoded);
// if everything is good, save to request for use in other routes
req.decoded = decoded;
return res.json({success: true, token: decoded});
next();
}
});
我用 Postman 做一个 Post 请求就像
Post http://localhost:3000/users
with
x-access-token: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJfaWQiOiI1NjFhODE5MjFhZGJmYWI2MzNlZWU4ZjciLCJ1c2VybmFtZSI6ImJhcm5vIiwicGFzc3dvcmQiOiIkMmEkMTAkcnh6SHY0dFFhbkxwVDNQOEVJSzNBTzVhLjcwNUJZdmxIOVhXOHlSVmpUMi9hNEdmTFd4YU8iLCJfX3YiOjAsImNyZWF0ZWRfYXQiOiIyMDE1LTEwLTExVDE1OjM0OjQyLjg3MFoifQ.ooELWBRlxtYwFTmJDFNOLiR6-2uR_-wjjXwPnS0c5Lk
而且我的令牌始终有效!
console.dir(decoded)
{
"success": true,
"token": {
"_id": "561a81921adbfab633eee8f7",
"username": "myuser",
}
}
为什么我的代码总是有效的?如何强制使此代码无效,例如注销?
【问题讨论】:
-
使用 jwt.io 的调试器查看有效负载,您的令牌不包含“exp”字段
-
通过将过期时间更改为当前时间来强制无效
标签: javascript node.js express jwt