#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
. Вы можете добавить его вручную двумя способами:
-
С помощью простого js:
iat: Math.round(Date.now() / 1000), exp: Math.round(Date.now() / 1000 5 * 60 * 60)
-
С
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