【发布时间】:2016-02-26 02:50:42
【问题描述】:
我正在尝试将 json Web 令牌 koa-jwt middleware 用于我正在编写的基于 koa 的节点应用程序。我想设置 web-token 有效负载的到期日期,我注意到使用标准实现会在有效负载中产生两个月后的到期日期。此实现如下所示:
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”属性。这就是问题所在。
【问题讨论】:
-
你试过'expiresIn'吗?我不知道 koa-jwt 但它似乎受到了 jsonwebtoken 的启发,它使用 expiresIn