Как структурировать аутентификацию Socket.io - PullRequest
0 голосов
/ 01 мая 2018

Я создаю приложение, используя Flask-SocketIO на стороне сервера и клиент Socket.IO javascript. (Позже будет также клиент Python). Я хочу убедиться, что пользователи проходят проверку подлинности перед подключением к серверу веб-сокетов.

Я создал форму входа в PHP для проверки имени пользователя и пароля. Если они действительны, то возвращается уникальный токен и токен также вставляется в таблицу на сервере. Токен передается клиентскому javascript, где он отправляется с запросом на создание соединения через веб-сокет.

Насколько я понимаю, Flask-SocketIO просто примет соединение, и мне нужно поместить код проверки в декоратор @socketio.on('connect'). (Я предполагаю, что серверная реализация Socket.IO работает аналогичным образом). Поэтому мой код проверяет представленный токен по таблице базы данных и, если он действителен, соединение через веб-сокет просто допускается. Однако, если токен недействителен, я запускаю команду disconnect(). Клиент javascript больше не пытается установить соединение, чего я и хочу в этом сценарии.

Вот где это сложно ...

Я хотел бы написать обработчик разъединения на стороне клиента, используя socket.on('disconnect', function() { //do something });, чтобы позволить пользователю восстановить соединение, когда сокет сломан, например, из-за плохой мобильной связи. Как я могу отличить случайное отключение от преднамеренного из-за неудачной проверки?

И наоборот, я хотел бы предупредить пользователя о том, что процесс проверки не прошел. Но как отличить это от сценария, где сокет сломан из-за плохой мобильной связи?

1 Ответ

0 голосов
/ 02 мая 2018

Я хотел бы написать обработчик разъединения на стороне клиента, используя socket.on ('отключить', функция () {// сделать что-то}); чтобы позволить пользователю восстановить соединение, когда сокет сломан из-за плохой мобильной связи, например.

Вам не нужно беспокоиться о переподключении. Клиентский протокол Socket.IO включает поддержку переподключения и всегда будет пытаться переподключиться при потере соединения. Чтобы убедиться в этом, запустите сервер, подключитесь к клиенту, а затем убейте свой сервер. Чуть позже перезапустите сервер, и вы увидите, что через несколько секунд соединение будет восстановлено.

...