Как заставить пользователя выйти из системы, когда его / ее имя изменилось другим пользователем?

В моем приложении я использую Forms-Authentication для входа и выхода пользователей.

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

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

Как я могу заставить этих пользователей выйти из системы с помощью Forms-Authentication?

ОБНОВИТЬ:

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        string controller = filterContext.RouteData.Values["controller"].ToString();
        string action     = filterContext.RouteData.Values["action"].ToString(); ;
        // Below returns the previous username, which does not exist anymore in db.
        string userName = HttpContext.Current.User.Identity.Name;

        UnitOfWork unitOfWork = new UnitOfWork();

        if (!unitOfWork.UserRepository.UserExists(userName))
        {
            FormsAuthentication.SignOut();
            filterContext.HttpContext.Session.Clear();
            filterContext.HttpContext.Session.Abandon();
            // I am not using Roles.


        }
        unitOfWork.Dispose();
        base.OnActionExecuting(filterContext);

    }

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

Заранее спасибо.

2 ответа

Решение

Вот что вы делаете, чтобы заставить пользователя выйти из системы:

public void UserPasswordChangedHandler()
{
  FormsAuthentication.SignOut();
  Roles.DeleteCookie();
  Session.Clear();
}

Я не думаю, что построчное объяснение требуется, самоочевидно достаточно. Пожалуйста, дайте мне знать, если я ошибаюсь.

Обновить

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

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

Обновление 2

Очистка куки

Надеюсь, это поможет вам.

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

Затем на каждом запросе страницы (возможно, с использованием Application_BeginRequest) проверяйте, есть ли этот текущий пользователь в этом списке, и если да, то вызывать FormsAuthentication.SignOut там и тогда.

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

Обратите внимание, что удаление состояния сеанса заочного пользователя - это еще одна проблема.

Другие вопросы по тегам