2010-01-24 4 views
7

ASP.NET MVC에서 사용자 정의 인증을 구현했습니다. 유효한 사용자가 로그인을 시도하면 AccountController의 Logon 메소드에 HttpContext.User = user을 설정합니다. 하지만을 요청하는 에만 그대로 남아 있습니다. 세션에 어떻게 설정할 수 있습니까?세션에 대해 HttpContext.User 설정

대안을 사용했는데 HttpContext.Session["CurrentUser"] = user으로 설정했습니다. 세션이 승인되었는지 확인하려면 HttpContext.User != null을 확인해야합니다. 하지만 응용 프로그램의 모든 곳에서 인증 논리를 노출하고 싶지는 않습니다. 만약 내가 그것을 바꿀 필요가 있다면, 그것은 지저분 할 것입니다.

제발 도와주세요. 한 솔루션은 모든 요청의 HttpContext.User 속성을 처음에 HttpContext.Session["CurrentUser"] 값으로 채울 수 있지만이를 수행하는 방법을 알지 못합니다.

답변

11

은 Global.asax에의 응용 프로그램 클래스에서 다음과 같은 방법을 쓰기

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

또는 당신이 당신의 컨트롤러 (참고로 상속 System.Web.Mvc.Controller의 "사용자"속성을 사용할 수 있습니다 : 확인 성공적으로 사용자 로그인을 확인할 때 FormsAuthentication.SetAuthCookie 메서드를 호출합니다.

+0

'.Net Core'에서 이와 동일한 기능은 무엇입니까? –

+0

나는 또한 .net 코어에서 같은 문제에 갇혀있다. 나는 여러 날을 노력했지만 어떤 확실한 해결책도 찾지 못했습니다. 해결책을 찾으면 알려주십시오. – Saif

6

이 작업을 수행하는 가장 좋은 방법은 사용자 지정 인증 모듈을 작성하고 응용 프로그램에 연결하는 것입니다. 이 모듈은 요청 전에 실행될 것이고 적절하게 HttpContext.User 속성을 설정할 기회를 갖습니다.

예를 들어 폼 인증 모듈을 고려해보십시오. HTTP 처리기 (.aspx 페이지, MVC 파이프 라인 등)가 실행되기 전에 요청을 가로 챌 수있는 기회가 있습니다. 로그인 쿠키의 값을 읽고 해독 한 다음 암호화 된 쿠키 값을 확인하고 검사가 통과되면 HttpContext.User를 설정합니다. 이렇게하면 처리기가 실행되고 실제로 요청을 처리 할 때 User 속성이 이미 올바르게 설정되어 있습니다.

마지막으로 사용자 정의 인증 모듈에서 이미 제공되는 [Authorize] 특성이 자동으로 작동하므로 ASP.NET에서 사용자 지정 인증 특성이 필요하지 않습니다. 그러나 AccountController.LogOn() 메서드 (또는이 대신 사용하는 모든 것)는 인증 모듈에서 유효성을 검사 할 토큰을 생성하는 적절한 인증 공급자와 통신해야합니다. 이 상자가 제공되는 것과 다른 코드를 작성해야하는 유일한 장소 여야합니다.

자세한 내용은 http://social.msdn.microsoft.com/Search/en-US?query=http%20moduleshttp://social.msdn.microsoft.com/Search/en-US?query=custom%20authentication%20asp.net을 참조하십시오.

관련 문제