Как идентифицировать / аутентифицировать пользователей с помощью socket.io - PullRequest
0 голосов
/ 03 мая 2018

Попытка обернуть мою голову какой-то логикой.

Я создаю простую пошаговую игру с Node.js и Socket.io. Идея состоит в том, что каждый пользователь «входит» через какую-то базовую интерфейсную систему (быстрый скаффолд RubyOnRails), а затем, как только он вошел в систему, он может обновить страницу и закрыть браузер, и они остаются в системе как обычно, пока не выйдут из системы. .

Мне нужна эта функция постоянной аутентификации с помощью веб-сокета, чтобы в то время как «внутриигровые» пользователи могли закрывать свой браузер и возвращаться в любой момент, и я мог передавать другим пользователям, когда игрок отключен / подключен. Игрок также может присоединяться к играм и выходить из них, но, очевидно, может быть только в одной игре за раз.

Я предполагаю, что при каждой загрузке страницы новый socket.id, с которым соединяется пользователь, должен быть сохранен в базе данных внутри таблицы пользователей? Или есть более простой способ привязать текущего пользователя к socket.id?

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

1 Ответ

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

Для этого вы можете использовать токены. Хорошим вариантом будет использование JSON Web Tokens (JWT).

JSON Web Token (JWT) - это открытый стандарт, определяющий компактный и автономный способ безопасной передачи информации между сторонами в виде объекта JSON. Эта информация может быть проверена и заслуживает доверия, поскольку она имеет цифровую подпись . JWT могут быть подписаны с использованием секретного (с алгоритмом HMAC) или пары открытого / секретного ключей с использованием RSA.
- https://jwt.io

Один из возможных способов использования JWT в вашем случае выглядит следующим образом:

  1. Пользователь входит в систему
  2. Новый JWT выдается сервером при успешном входе в систему
  3. Этот JWT отправляется клиенту и хранится на стороне клиента (например, файлы cookie, локальное хранилище и т. Д.)
  4. При каждом событии соединения с сокетом клиент отправляет этот токен на сервер для проверки
  5. Сервер принимает соединение, только если указанный токен проверен, и закрывает соединение в противном случае

Основное преимущество использования JWT заключается в том, что нет необходимости хранить дополнительные данные на стороне сервера, поскольку токены можно проверять с использованием криптографических методов, таких как цифровые подписи.


Подробнее о JWT: https://jwt.io

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...