我正在使用 Passport-jwt 生成我的令牌,但我注意到令牌永远不会过期,有没有办法根据为我设置的规则使特定令牌失效,例如:
'use strict';
const passport = require('passport');
const passportJWT = require('passport-jwt');
const ExtractJwt = passportJWT.ExtractJwt;
const Strategy = passportJWT.Strategy;
const jwt = require('../jwt');
const cfg = jwt.authSecret();
const params = {
secretOrKey: cfg.jwtSecret,
jwtFromRequest: ExtractJwt.fromAuthHeader()
};
module.exports = () => {
const strategy = new Strategy(params, (payload, done) => {
//TODO: Create a custom validate strategy
done(null, payload);
});
passport.use(strategy);
return {
initialize: function() {
return passport.initialize();
},
authenticate: function() {
//TODO: Check if the token is in the expired list
return passport.authenticate('jwt', cfg.jwtSession);
}
};
};
或一些使某些令牌失效的策略
JWT 的标准是将到期时间作为“exp”包含在有效负载中。如果您这样做,passport-JWT 模块将尊重它,除非您明确告诉它不要这样做。比自己实现更容易。
EDIT
现在有更多代码!
我通常使用 npm 模块jsonwebtoken
用于实际创建/签署我的令牌,它有一个选项可以使用有效负载的 exp 元素中的友好时间偏移来设置过期时间。它的工作原理如下:
const jwt = require('jsonwebtoken');
// in your login route
router.post('/login', (req, res) => {
// do whatever you do to handle authentication, then issue the token:
const token = jwt.sign(req.user, 's00perS3kritCode', { expiresIn: '30m' });
res.send({ token });
});
从我看来,你的 JWT 策略看起来就像你已经拥有的那样,它会自动遵守我上面设置的 30 分钟的过期时间(显然,你可以设置其他时间)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)