@vetsmen

Как решить проблему авторизации в Socket.io?

У меня написана авторизация на express (через passport.js), сокеты получают авторизацию через passport.socketio при вызове io.use:
io.use(passportSocketIo.authorize({
	cookieParser: cookieParser, 
	key:          'express.sid',
	secret:       'keyboard cat', 
	store:        sessionStore,      
}));

Проблема вот в чем: когда я нахожусь в двух вкладках и выхожу из сайта в одной, то в другой продолжает работать сокет и в request (socket.request.user.logged_in) пишет true, поэтому все действия выполняются так, как будто пользователь все еще авторизован.
Я хочу сделать так: при логауте вызвать метод passportSocketIo.authorize, чтобы он переопределил socket.request, но как это сделать? И вообще, какие есть мысли по решению данной проблемы? Спасибо!
  • Вопрос задан
  • 414 просмотров
Пригласить эксперта
Ответы на вопрос 1
evgeniy2194
@evgeniy2194
PHP, js developer
Когда вы подключаетесь в соседней вкладке, у вас открывается новое соединение с авторизацией.

Как вариант:
1. Не пускать пользователя другой раз. При заходе в новом окне либо разрывать старое соединение либо сообщать о том что он уже подключен.
2. Отправить пользователю запрос о том что он разлогинился, и соответственно разлогинить его во всех его соккетах.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы