【问题标题】:Setting expiry using koa-jwt使用 koa-jwt 设置过期时间
【发布时间】: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

标签: node.js jwt koa


【解决方案1】:

https://github.com/koajs/jwt/blob/d3b169b85571034a73d0343ca5f5fd0deab0d452/test.js

第 92 行,它们使用 'exp' 属性,但在 .sign() 时,而不是在定义 jwt 时

【讨论】:

  • 感谢 clemkoa - 事实证明我一直在设置“exp”属性,但太暗而无法实现。现在我明白了这是在哪里完成的,我可以成功地控制我需要的到期时间。有关在何处/如何完成此操作的详细信息,请参阅我上面修改过的问题。
猜你喜欢
  • 1970-01-01
  • 2017-04-29
  • 2020-11-08
  • 2020-08-18
  • 2016-08-08
  • 2020-08-17
  • 2019-04-17
  • 2015-12-13
  • 1970-01-01
相关资源
最近更新 更多