Установите HttpContext. Пользователь для сессии

Я реализовал пользовательскую аутентификацию в ASP.NET MVC. Если действительный пользователь пытается войти в систему, я установил HttpContext.User = user в методе Входа в систему AccountController. Но это остается там только для того запроса. Как я могу установить его для сессии?

Я использовал альтернативу, набор HttpContext.Session["CurrentUser"] = user. Если я хочу видеть, авторизовывается ли сессия, я должен был бы проверить что HttpContext.User != null. Но, я не хочу выставлять логику аутентификации везде в приложении. Если бы я должен изменить это, это было бы грязно.

Помогите мне решить это. Одно решение могло заполнять HttpContext.User свойство каждого запроса со значением HttpContext.Session["CurrentUser"] вначале, но я не знаю, как сделать это.

7
задан Abdulsattar Mohammed 24 January 2010 в 05:11
поделиться

2 ответа

Запишите следующий метод в класс приложения Global.asax

protected void Application_BeginRequest(Object sender, EventArgs e)
{
   HttpContext.Current.User = HttpContext.Session["CurrentUser"];
}

или вы можете использовать свойство "User" System.Web.Mvc.Controller, унаследованное от ваших контроллеров (обратите внимание: обязательно вызовите метод FormsAuthentication.SetAuthCookie при успешной проверке входа пользователя в систему).

11
ответ дан 6 December 2019 в 11:49
поделиться

Лучший способ сделать это - написать пользовательский модуль аутентификации и подключить его к вашему приложению. Этот модуль будет выполнен перед любым запросом и будет иметь возможность установить свойство httpContext.user в зависимости от ситуации.

Например, рассмотрим модуль аутентификации форм. Перед прогона вашего HTTP-обработчика (будь то страница .aspx, трубопровод MVC и т. Д.), У него есть шанс перехватить запрос. Он читает значение входа в систему cookie, расшифровывает и проверяет зашифрованное значение cookie и устанавливает httpContext.user, если проходят проверки. Таким образом, когда обработчик работает и на самом деле обрабатывает запрос, пользовательское свойство уже установлено правильно.

В конце концов, что это будет выглядеть, так это то, что вам не нужен пользовательский атрибут авторизации на ASP.NET, поскольку атрибут [авторизации], уже предоставленный в поле в поле, должен работать автоматически с помощью собственного модуля аутентификации. Тем не менее, ваш метод AccountController.logon () (или все, что вы используете вместо этого), необходимо будет связываться с соответствующим поставщиком аутентификации, который генерирует токен, который будет проверен модулем аутентификации. Это должно быть единственное место, где вам нужно будет написать код, отличный от того, что предоставляется в поле.

См. http://social.msdn.microsoft.com/search/en-us?query=http%20Modules и http://social.msdn.microsoft.com/search /en-us?query=custom%20authentication%20asp.net Для получения дополнительной информации.

6
ответ дан 6 December 2019 в 11:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: