【问题标题】:How to expire token in jwt-simple?如何使 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 中添加过期时间

【问题讨论】:

    标签: javascript node.js express jwt


    【解决方案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。您可以通过两种方式手动添加:

      1. 用纯js:

        iat: Math.round(Date.now() / 1000), exp: Math.round(Date.now() / 1000 + 5 * 60 * 60)

      2. 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);
            };
            

            【讨论】:

              猜你喜欢
              • 2017-05-30
              • 2020-06-13
              • 2021-12-31
              • 2017-03-04
              • 2019-07-04
              • 2021-12-24
              • 2020-02-20
              • 1970-01-01
              • 2018-07-20
              相关资源
              最近更新 更多