Как определить, активен ли пользователь только на одном устройстве в данный момент времени как в iOS, так и в Android - PullRequest
0 голосов
/ 12 апреля 2019

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

Это приложение всегда будет подключено к Интернету, поэтому нет автономного режима, и, следовательно, вот мой подход к обработке случая одного сеанса

  1. При вызове службы входа из DeviceA сервер будет поддерживать идентификатор сеанса.

  2. Если пользователь выполняет вход в систему с любого другого устройства (DeviceB), то сервер проверит,это от DeviceA с DeviceA_sessionID?и если нет, он отправит 400 BadRequest response на устройство B с сообщением «Пожалуйста, выйдите со всех устройств, на которых вы вошли, чтобы использовать приложение»

  3. SessionId на сервере может бытьдействителен в течение 2 дней или недели.

Основная проблема, которую я пытаюсь решить, заключается в том, что я не хочу иметь никаких зависимых от устройства зависимостей, потому что vendorId или любой Id можетизменить, когда мы делаем сброс к заводским настройкам или переустанавливаем приложение или приобретаем новое устройство.

На шаге 2 я думаю, что будет хорошей идеей просто прекратить сеанс DeviceA и разрешить вход в DeviceB сновый идентификатор сеанса, а затем показать сообщение на DeviceA, что ваш сеанс был прекращен?Или просто подождать, пока истечет время сеанса?

С помощью sessionIds на сервере я могу убедиться, что на сервере есть логика для определения того, что одновременно активен только один сеанс устройства на пользователя и любой другойсеансы просто прекращаются.

Кроме того, пользователи меняют свои устройства, поэтому я предполагаю, что с помощью sessionId пользователь все еще может войти в систему и создать новый sessionId для своего нового устройства, а сервер может завершить старые.

Дайте мне знать, если это правильный подход или есть лучший способ справиться с этим делом.

Ответы [ 2 ]

0 голосов
/ 07 июня 2019

Как я решил эту проблему, использовал sessions, а не JWT. Мотивация не использовать JWT состояла в том, что мы не реализовывали / не использовали какие-либо претензии здесь для связи с сервером для чего-либо.

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

0 голосов
/ 12 апреля 2019

Если у вас есть какой-либо вид авторизации, и устройству B разрешено прерывать сеанс устройства A, вы можете обновлять токен авторизации при каждом запросе. Итак, сразу после новой аутентификации истекает сеанс предыдущего устройства.

Например, вы можете использовать токен авторизации JWT. Подробнее здесь .

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