Я создаю приложение, используя Flask-SocketIO на стороне сервера и клиент Socket.IO javascript. (Позже будет также клиент Python). Я хочу убедиться, что пользователи проходят проверку подлинности перед подключением к серверу веб-сокетов.
Я создал форму входа в PHP для проверки имени пользователя и пароля. Если они действительны, то возвращается уникальный токен и токен также вставляется в таблицу на сервере. Токен передается клиентскому javascript, где он отправляется с запросом на создание соединения через веб-сокет.
Насколько я понимаю, Flask-SocketIO просто примет соединение, и мне нужно поместить код проверки в декоратор @socketio.on('connect')
. (Я предполагаю, что серверная реализация Socket.IO работает аналогичным образом). Поэтому мой код проверяет представленный токен по таблице базы данных и, если он действителен, соединение через веб-сокет просто допускается. Однако, если токен недействителен, я запускаю команду disconnect()
. Клиент javascript больше не пытается установить соединение, чего я и хочу в этом сценарии.
Вот где это сложно ...
Я хотел бы написать обработчик разъединения на стороне клиента, используя socket.on('disconnect', function() { //do something });
, чтобы позволить пользователю восстановить соединение, когда сокет сломан, например, из-за плохой мобильной связи. Как я могу отличить случайное отключение от преднамеренного из-за неудачной проверки?
И наоборот, я хотел бы предупредить пользователя о том, что процесс проверки не прошел. Но как отличить это от сценария, где сокет сломан из-за плохой мобильной связи?