Технологии, которые я использую:
- MVC v2
- Аутентификация с помощью форм (истечение срока действия)
- Сервер состояния сеанса
- Настраиваемый атрибут авторизации
Я использую процесс сервера состояний для моего приложения MVC.Во время тестирования, когда аутентифицированный пользователь нажимает кнопку «LogOff», он корректно выводит их на экран аутентификации и при успешном вводе учетных данных регистрирует их снова. НО, он находит свое предыдущее состояние переменной сеанса, а НЕперезагрузите все новые разрешения, которые я им дал.Это связано с тем, как я загружаю пользователя в следующем коде:
public override void OnAuthorization(AuthorizationContext filterContext) {
if (filterContext == null)
throw new ArgumentNullException("FilterContext");
if (AuthorizeCore(filterContext.HttpContext)) {
IUser customUser = filterContext.HttpContext.Session["CustomUser"] as IUser;
if ((customUser == null) || (customUser.Name != filterContext.HttpContext.User.Identity.Name)) {
customUser = new User(filterContext.HttpContext.User.Identity.Name,
filterContext.HttpContext.User.Identity.IsAuthenticated);
}
if (_privileges.Length > 0) {
if (!customUser.HasAtLeastOnePrivilege(_privileges))
filterContext.Result = new ViewResult { ViewName = "AccessDenied" };
}
filterContext.HttpContext.Session["CustomUser"] = customUser;
}
}
Итак, вы можете видеть, что я храню мой customUser
в Session
, и это значение является тем, что было выбраноиз предыдущего сеанса, даже если пользователь вышел из системы (но вошел обратно в скользящее окно истечения срока действия.
Итак, мой вопрос, должен ли я сделать простой вызов Session.Abandon()
в моем методе LogOff
в AccountController
, или есть более выгодный способ справиться с этим?