Asp.Net Core выход пользователя забанен - PullRequest
0 голосов
/ 19 ноября 2018

Я забаню конкретного пользователя на своем веб-сайте и обновлю поля базы данных информацией о запрете, но если они уже вошли в систему, они все еще могут использовать веб-сайт

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

Есть ли простой способ сделать это?

Как я могу заставить их выйти из системы?

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

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

Я использовал валидатор файлов cookie на каждые 20 запросов, чтобы уменьшить количество проверок БД, и, если пользователь забанен, я выхожу из системы

0 голосов
/ 19 ноября 2018

Я могу думать только об этом взлом :

public class HomeController : Controller
{
    private readonly SignInManager<User> _signInManager;
    private readonly SignInManager<User> _userManager;

    public HomeController(
               SignInManager<User> signInManager, 
               UserManager<ApllicationUser> userManager)
    {
        _signInManager = signInManager;
        _userManager = userManager;
    }

    public async Task<IActionResult> Index()
    {
        var user = await _userManager.GetUserAsync(User);
        if (user.Status == UserStatus.Banned)
        {
            await _signInManager.SignOutAsync();
        }

        return View();
    }
}

Использование учетной записи администратора для изменения статуса пользователя на Banned. Затем, если заблокированный пользователь пытается получить доступ к какой-либо странице, мы проверяем статус пользователя, прежде чем вернуть View.


Если у вас есть время, вы можете преобразовать код в атрибут следующим образом:

[UserStatus("Active")]
public IActionResult Index()
{
    // user with status is NOT active cannot assign to this page
    return View();
}

ОБНОВЛЕНИЕ: Если вы можете использовать SignalR в своем проекте, я думаю, что это должно быть лучше. Отправьте запрос клиенту, который делает новый запрос на сервер, чтобы выйти.

...