大佬教程收集整理的这篇文章主要介绍了JWT 不会过期(Node.js),大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用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”)。
我做错了什么?
您可以只使用数字来表示秒(例如使用 15
表示 15 秒)
或
您可以使用字符串来表示毫秒(例如 "15"
表示 15 毫秒)
或
您可以指定天数或小时数。这是来自 jsonwebtoken 的文档:
Eg: 60,"2 days","10h","7d". A numeric value is interpreted as a seconds count. If you use a String be sure you provide the time units (days,hours,etC),otherwise milliseconds unit is used by default ("120" is equal to "120ms").
https://www.npmjs.com/package/jsonwebtoken#jwtsignpayload-secretorprivatekey-options-callBACk
,在我看过的视频中,在将 payload
设置为 jsonwebtoken.sign(...)
之前程序员创建了变量 payload
:
const payload = {
sub: _id,iat: Date.now() // and this line ruined everything for me
}
我刚刚发现它设置了错误的月份、日期和时间,这就是我的 JWT 令牌过期日期错误的主要问题。
我只是通过删除行 iat: Date.now()
解决了这个问题。
此外,如果您要签署新的 jwt 令牌 - 您不需要自己设置 iat
。 jwt.sign()
会为您完成
我最后的 generateToken
函数:
function generateToken(user) {
const _id = user._id
const expiresIn = '10s'
const payload = {
sub: _id
// no longer has "iat"
}
const signedToken = jsonwebtoken.sign(payload,config.jwtSecret,{expiresIn: expiresIn})
// .sign method will generate "iat"
return {
token: "Bearer " + signedToken,expires: expiresIn
}
}
还尝试使用 jwt.io 来检查令牌中的有效负载和到期日期是否正确。
以上是大佬教程为你收集整理的JWT 不会过期(Node.js)全部内容,希望文章能够帮你解决JWT 不会过期(Node.js)所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。