【发布时间】:2021-09-23 12:06:27
【问题描述】:
我正在使用 passport-jwt 策略来验证令牌。
const options = {
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
secretOrKey: config.jwtSecret
}
const JwtLogin = new JwtStrategy(options, (jwt_payload, done) => {
User.findOne({_id: jwt_payload.sub}, (err, user) => {
if (err) {
return done(err, false)
}
if (user) {
return done(null, user)
} else {
return done(null, false)
}
})
})
到目前为止,我可以使用函数generateToken(user)轻松生成此令牌
const _id = user._id
const expiresIn = '1m'
const payload = {
sub: _id,
iat: Date.now()
}
const signedToken = jsonwebtoken.sign(payload, config.jwtSecret, {expiresIn: expiresIn})
return {
token: "Bearer " + signedToken,
expires: expiresIn
}
}
module.exports.generateToken = generateToken
为了测试这个令牌,我使用router.get('/protected')
router.get('/protected', passport.authenticate('jwt',{session: false}), controller.protected)
要检查此 API,我在 Authorization 标头中发送 Bearer <token>
一切都很好,除了我创建的每个令牌都不会过期(我尝试了很多选项,包括 '15s' 或只是 'ms')。
我做错了什么?
【问题讨论】:
-
我刚弄好了,谢谢你的建议!
-
检查令牌有效负载,是否设置了过期时间?现在是几号?只需将您的令牌粘贴到jwt.io 以检查或将最近生成的令牌粘贴到您的问题中
-
另外,您正在将 JWT 策略添加到护照,对吗? passport.use(JwtLogin)
-
我检查了 jwt.io,它说这个特定的令牌有 10 秒的过期日期,但我仍然可以轻松地使用它访问“受保护”路由。 (是的,我确实使用了 passport.use(JwtLogin))
-
但是每次我创建这个令牌并在 jwt.io 上验证它 - 它显示不同的时间区域和正确的 exp 时间