如何使 jwt-simple 中的令牌过期?
Posted
技术标签:
【中文标题】如何使 jwt-simple 中的令牌过期?【英文标题】:How to expire token in jwt-simple? 【发布时间】:2017-02-28 16:14:05 【问题描述】:我刚刚在 nodejs 的后端实现了 jwt-simple。我想在给定时间使令牌过期。
var jwt = require('jwt-simple');
Schema.statics.encode = (data) =>
return JWT.encode(data, CONSTANT.ADMIN_TOKEN_SECRET, 'HS256');
;
Schema.statics.decode = (data) =>
return JWT.decode(data, CONSTANT.ADMIN_TOKEN_SECRET);
;
如何在 jwt-simple 中添加过期时间
【问题讨论】:
【参考方案1】:您可以在护照策略功能中使用过期日期验证您的令牌,如下所示:
passport.use(new JwtStrategy(opts, function(jwt_payload, done)
User.find(id: jwt_payload.id, function(err, user)
if (err)
return done(err, false, message: "Incorrect Token!!");
if (user)
if (user[0].token_expiration_date <= Date.now())
return done(null, false, message: "Expired Token");
else
return done(null, user);
else
return done(null, false, message: "Incorrect Token");
);
));
希望对您有所帮助。
【讨论】:
【参考方案2】:没有默认的exp
。您可以通过两种方式手动添加:
用纯js:
iat: Math.round(Date.now() / 1000), exp: Math.round(Date.now() / 1000 + 5 * 60 * 60)
与moment.js
:
iat: moment().unix(), exp: moment().add(5, 'hours').unix()
Source 来自原始 Github 存储库。
【讨论】:
【参考方案3】:改用 jsonwebtoken。
https://github.com/auth0/node-jsonwebtoken
const jwt = require(`jsonwebtoken`)
const token = jwt.sign(
data: 'foobar'
, 'secret', expiresIn: '1h' );
【讨论】:
【参考方案4】:您可以在调用 create 函数之前使用有效负载中的 exp 字段,例如,您可以使用 moment 来获取时间并添加您想要的任何内容。如果要检查令牌是否过期或其他类型的错误,可以使用 jwt-simple-error-identify 代替。
在他的文档中有一个例子。https://www.npmjs.com/package/jwt-simple-error-identify
【讨论】:
【参考方案5】:更准确地说,在您的数据对象中添加exp
属性,其中exp
是unix 格式的到期时间。
例如
var data = "data":["some data"],exp:16872131302
var jwt = require('jwt-simple');
Schema.statics.encode = (data) =>
return JWT.encode(data, CONSTANT.ADMIN_TOKEN_SECRET, 'HS256');
;
Schema.statics.decode = (data) =>
return JWT.decode(data, CONSTANT.ADMIN_TOKEN_SECRET);
;
【讨论】:
以上是关于如何使 jwt-simple 中的令牌过期?的主要内容,如果未能解决你的问题,请参考以下文章