我试图将json网络令牌koa-jwt middleware用于我写作的基于koa的节点应用。我想设置网络令牌有效负载的到期时间,并且我注意到使用标准实现会在两个月后的有效负载中产生到期日期。此实现如下所示:
var koa = require('koa');
var jwt = require('koa-jwt');
var app = koa();
...
// This is the jwt line in question...
app.use(jwt({ secret: 'shared-secret' }));
...
我想要做的是控制它,以便我可以将它设置为1周,1天,15分钟,等等。我尝试过多种变体,例如:
app.use(jwt({ secret: 'shared-secret', exp: 30 }));
app.use(jwt({ secret: 'shared-secret', expires: 30 }));
......以及其他许多人,但到目前为止,没有任何工作,文件在这方面非常轻松。任何关于如何做到这一点的见解将不胜感激。
2月26日更新 感谢clemkoa,我找到了答案 - 事实证明我正在做的事情正是我需要的" exp"归因于整个时间。在登录期间,用户的成功验证将返回:
ctx.body = {success: true, token: user.generateJWT()};
其中user.generateJWT()是User Mongoose模式中的函数调用。该函数如下所示:
UserSchema.methods.generateJWT = function() {
// set jwt expiration
var today = new Date();
var exp = new Date(today);
exp.setDate(today.getDate() + 1);
return jwt.sign({
_id: this._id,
username: this.username,
exp: parseInt(exp.getTime() / 1000)
}, config.jwtSecret);
};
请注意包含" exp"属性。这就是问题所在。
答案 0 :(得分:3)
https://github.com/koajs/jwt/blob/d3b169b85571034a73d0343ca5f5fd0deab0d452/test.js
第92行,他们使用'exp'属性,但在.sign()时,不是在定义jwt时