Как истечь токен в jwt-simple?

#javascript #node.js #express #jwt

#javascript #node.js #экспресс #jwt

Вопрос:

Я только что реализовал jwt-simple на своем сервере в nodejs. я хочу, чтобы токен истекал к заданному времени.

  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

Ответ №1:

По умолчанию нет 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, ‘часов’).unix()

Источник из оригинального репозитория Github.

Ответ №2:

Вы можете подтвердить свой токен датой истечения срока действия в функции passport Strategy, например:

 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"});
        }

    });
}));
  

Надеюсь, что это может вам помочь.

Ответ №3:

Чтобы быть более точным, добавьте 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);
};
  

Ответ №4:

Вместо этого используйте jsonwebtoken.

https://github.com/auth0/node-jsonwebtoken

 const jwt = require(`jsonwebtoken`)

const token = jwt.sign({
  data: 'foobar'
}, 'secret', { expiresIn: '1h' });
  

Ответ №5:

Вы можете использовать поле exp в полезной нагрузке перед вызовом функции create и, например, вы можете использовать moment, чтобы узнать время и добавить все, что вы хотите. Если вы хотите проверить, истек ли срок действия токена или ошибка другого типа, вы можете вместо этого использовать jwt-simple-error-identify.

В его документации есть пример этого.
https://www.npmjs.com/package/jwt-simple-error-identify