程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了JWT 不会过期(Node.js)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决JWT 不会过期(Node.js)?

开发过程中遇到JWT 不会过期(Node.js)的问题如何解决?下面主要结合日常开发的经验,给出你关于JWT 不会过期(Node.js)的解决方法建议,希望对你解决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>

JWT 不会过期(Node.js)

除了我创建的每个令牌都不会过期外,一切都很好(我尝试了很多选项,包括“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 令牌 - 您不需要自己设置 iatjwt.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,请注明来意。