Срок действия веб-токена Json не истекает
Я только что реализовал аутентификацию веб-токена json, на своем бэкэнде я отправляю токен, который создается jsonwebtoken
клиенту следующим образом:
var token = jwt.sign(user, secret.secretToken, { expiresInMinutes: 1 });
return res.json({ token: token });
и на стороне клиента я просто сохраняю этот токен в SessionStorage. Дело в том, что токен не истекает через минуту, я что-то упустил?
РЕДАКТИРОВАТЬ: я реализовал то же самое, что показано в этом посте.
3 ответа
У меня возникла та же проблема, когда я не предоставлял объект в качестве первого аргумента jwt.sign
например, jwt.sign('testuser', secret.secretToken, { expiresIn: '1h' });
,
Это неправильное использование jwt.sign
работает, даже если это неправильно, он просто игнорирует предоставленные настройки. https://github.com/auth0/node-jsonwebtoken/issues/64
Обязательно укажите объект в качестве первого аргумента, например jwt.sign({user: 'testuser'}, secret.secretToken, { expiresIn: '1h' });
Обновление: сообщалось о проблемах с использованием нестандартных объектов javascript, таких как mongoose. Версия 5.5.2 имеет исправление для этого. Подробнее здесь. Спасибо @gugol за уведомление. Убедитесь, что вы передаете простой объект с нужными вам свойствами, а не прямой объект базы данных или тому подобное.
Маркер не будет автоматически удален из хранилища сеансов. Однако если вы попытаетесь проверить, является ли токен действительным, токен с истекшим сроком действия должен быть недействительным.
Из этого урока проверка достоверности должна вызвать исключение:
if (token) {
try {
var decoded = jwt.decode(token, app.get('jwtTokenSecret'));
// handle token here
} catch (err) {
return next();
}
} else {
next();
}
Проверка также включена в пакет jsonwebtoken. И это из документов:
(Синхронно с обратным вызовом) Возвращает полезную нагрузку, декодированную, если подпись (и, возможно, срок действия, аудитория, издатель) действительны. Если нет, он вернет ошибку.
//use this to create the token
var token = jwt.sign({
exp: "1h",
data: "payload"
}, "secret");
/*while checking the token ,Throws error if the token is expired else you will get the decoded data*/
jwt.verify(token, 'secret', function(err, decoded) {
if (err) {
/*
err = {
name: 'TokenExpiredError',
message: 'jwt expired',
expiredAt: 1408621000
}
*/
}
});