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()
}