Как получить все сеансы входа пользователей в Asp.Net Core 2.2? - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть сайт на Asp.Net Core 2.2 с использованием сеансов.

Есть ли способ получить все сеансы пользователей и всех пользователей входа в систему и выполнить их итерацию?

Также прервать сеанс для некоторого пользователя,если он забанен.

1 Ответ

0 голосов
/ 01 февраля 2019

Просто нет.Аутентифицированное состояние пользователя сохраняется только через локальный cookie на клиенте.Не существует своего рода «основного списка» вошедших в систему пользователей.Однако, если хотите, вы можете создать дополнительную таблицу или иным образом регистрировать входы и выходы пользователей из системы, к которым вы можете обратиться за этой информацией.Он не будет полностью точным, особенно при выходе из системы, потому что аутентификация пользователя может просто прерваться, не требуя никаких действий, к которым вы могли бы присоединиться, чтобы зарегистрировать это.Однако, если у вас есть известный срок действия аутентификации, скажем, 20 минут, вы можете считать, что любой логин старше этого периода больше не действителен.Это предполагает абсолютный срок действия, который является значением по умолчанию.Если срок действия истекает, вам потребуется проделать еще больше работы, чтобы сохранить какую-то запись активности пользователя.

Длинно и коротко, это не тривиально, но это можно сделать, если вам действительно нужна информация.

Что касается автоматического выхода из системы, это просто требует аннулирования отметки безопасности.Это фактически лишит законной силы пользовательский cookie-файл, заставив его снова войти в систему.В этот момент вы можете проверить их статус «забанен», как бы это ни было сделано, и отказаться от попытки входа в систему.

await _userManager.UpdateSecurityStampAsync(userId);

Однако это не вступит в силу немедленно, поскольку отметка безопасностине повторяется с каждым запросом.Это можно сделать, установив нулевой интервал проверки в файле Startup.cs:

services.Configure<IdentityOptions>(options =>
{
    options.SecurityStampValidationInterval = TimeSpan.FromSeconds(0);             
});

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

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