socketio-jwt отключить просроченные токены

Я могу аутентифицироваться с помощью socketio-jwt, и все работает отлично. Проблема, с которой я сталкиваюсь, заключается в том, что если я установил срок действия на минимальное время и позволил ему истечь, я могу продолжать отправлять и получать сообщения по соединению. Пока я не обновляю страницу, связь сохраняется. Как только я обновляю, соединение разрывается, и мне необходимо восстановить соединение. Возможно ли, чтобы сервер проверил токены с истекшим сроком действия и отключил соединение?

0 ответов

Библиотека не поддерживает эту функцию, вы можете проверять токен на каждом желаемом событии сокета io.

В Github Issue автор ответил на эту аналогию:

Id_token похож на ваш национальный паспорт, у обоих есть срок действия, вы можете въехать в страну, если срок действия вашего паспорта не истек, а большинство стран не будут отслеживать срок действия, чтобы выследить вас.

Вы можете справиться с этим вручную, используя промежуточное программное обеспечение socketio, например:

const timer = require('long-timeout')

function middleware (socket, next) {
  const decodedToken = socket.user // Assuming the decoded user is save on socket.user

  if (!decodedToken.exp) {
    return next()
  }

  const expiresIn = (decodedToken.exp - Date.now() / 1000) * 1000
  const timeout = timer.setTimeout(() => socket.disconnect('unauthorized'), expiresIn)

  socket.on('disconnect', () => timer.clearTimeout(timeout))

  return next()
}
Другие вопросы по тегам