2010-06-18 5 views
1

MVC 웹 사이트에서 양식 인증을 사용하고 있습니다. Visual Studio의 기본 ASP.NET 구성 옵션을 사용하여 사용자와 역할을 관리합니다. 지금까지 좋은 모든 것..NET MVC 폼 인증 - 디버그 IsInRole()?

Page.User.IsInRole("Moderator")보기에서 성공적으로 수행 할 수 있습니다. True이 예상대로 반환됩니다.

그러나 을 Global.asax의 내부 Application_PostAuthenticateRequest()Context.User.IsInRole("Moderator")를 호출 할 때 (이 문제에 대해, 사이클 도중 또는 이후 이벤트 ..) False가 반환된다.

Page.UserContext.User의 차이점은 무엇입니까? 그리고 Global.asax 내에서 동일한 (예상되는) 결과를 얻으려면 어떻게해야합니까?

답변

1

이 단계에서 컨텍스트는 여전히 aspnet 계정 또는 응용 프로그램 풀을 실행하는 계정에서 실행 중일 수 있습니다. Global.asax에서 사용할 수있는 몇 가지 이벤트 (또는 모두)를 만들고 텍스트 파일에 Context.User.Name의 결과를 인쇄하는 테스트를 수행 할 수 있습니다. 그러면 이름에 값이 있는지 여부가 표시됩니다. 내가 본 것은 사이트가 aspnet 계정으로 실행 중일 때 이름이 비어 있다는 것입니다.

데이터베이스에 대한 연결을 확인하고 Context.User.IsInRole ("사회자")가 false를 반환하는 동안 데이터베이스에 누가 로그인하려고하는지 확인할 수도 있습니다.

또한 (그리고 이것은 어둠 속에서 촬영 한 것입니다.) Thread.CurrentPrincipal.IsInRole ("사회자")가 제공하는 것을 볼 수 있습니다. 이 제안이 디버깅에 도움이되기를 바랍니다.

+0

큰 제안! 나는 실제로 IsInRole()이'PostAuthenticateRequest'에서 다른 결과를 반환한다는 것을 알았습니다. 그런 다음 AuthorizeRequest (authorizerequest가 올바른 (예상) 결과를주는 것처럼 보입니다)에 있습니다. – Ropstah