我使用"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 http://localhost:3000/users
with
x-access-token: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJfaWQiOiI1NjFhODE5MjFhZGJmYWI2MzNlZWU4ZjciLCJ1c2VybmFtZSI6ImJhcm5vIiwicGFzc3dvcmQiOiIkMmEkMTAkcnh6SHY0dFFhbkxwVDNQOEVJSzNBTzVhLjcwNUJZdmxIOVhXOHlSVmpUMi9hNEdmTFd4YU8iLCJfX3YiOjAsImNyZWF0ZWRfYXQiOiIyMDE1LTEwLTExVDE1OjM0OjQyLjg3MFoifQ.ooELWBRlxtYwFTmJDFNOLiR6-2uR_-wjjXwPnS0c5Lk
我的令牌始终有效!
console.dir(decoded)
{
"success": true,
"token": {
"_id": "561a81921adbfab633eee8f7",
"username": "myuser",
}
}
为什么我的代码始终有效?如何强制使此代码无效,例如logout?
答案 0 :(得分:0)
库可能不会按时间使令牌无效。在您的情况下,签名可能是正确的,因此您获得已解码变量。可能你需要自己检查一下。
这是检查实际生成的JWT令牌的非常有用的工具。 http://jwt.io/#debugger
答案 1 :(得分:0)
使用jwt.sign()时,提供的第一个参数必须是对象。尝试更换您的代码,如下所示。
var token = jwt.sign({user: user}, app.get('superSecret'), {
expiresIn: 1
});
此外,使用expiresIn代替expiresInSeconds,因为它已被弃用。