Срок действия веб-токена 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
      }
    */
  }
});
Другие вопросы по тегам