Разрешить пользователю входить с одного устройства одновременно - PullRequest
0 голосов
/ 15 октября 2018

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

Предположим, есть веб-приложение (приложение Ruby on Rails), которое позволяетпользователь может войти с одного устройства одновременно.Как этого достичь?

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

Я также рассмотрел request.remote_ip, но это может быть одинаковым для нескольких подключенных устройствна один Wi-Fi.

Было бы очень полезно, если бы кто-нибудь мог поделиться некоторыми мыслями о возможных решениях.Спасибо!

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

Мое личное мнение, вам не нужен конкретный уникальный идентификатор или что-то еще.

Если пользователь входит в систему впервые, сгенерируйте токен JWT, UNIQ или т. Д. И сохраните его в БД.

Теперь вы знаете, что пользователь вошел в систему, потому что поле токена занято.

Если пользователь вышел из системы, убейте токен и очистите поле токена.

Со 2-гоустройство, пытающееся войти в сообщение «Вы уже вошли с другим устройством. Пожалуйста, SignOut from the blabla ..»

Если нет доступа, то аналогично электронной почте для сброса пароля для сбросааутентификация учетной записи.

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

0 голосов
/ 15 октября 2018

Вы также не можете положиться на request.remote_ip.Из-за NAT один IP-адрес может быть совместно использован несколькими пользователями и / или устройствами, например - обычным случаем является домашний маршрутизатор или сотовые данные.

Но вы можете создать уникальный идентификатор / токен сеанса при входе пользователя в систему исохраните его как в файлах cookie, так и на стороне сервера, а затем проверьте его.Когда пользователь входит в систему со второго устройства - это перезапишет первый токен, а последний сеанс станет единственным, разрешенным для пользователя.Или вы можете отказать во втором входе в систему, когда предыдущий сеанс существует (не был прерван или истек тайм-аут) в зависимости от вашей логики.

Для devise драгоценного камня есть devise-security драгоценный камень, который предоставляет стратегию :session_limitable, которая реализует правило дляпервый сеанс становится непригодным для использования.

...