2013-11-22 2 views
6

'ASP.NET MVC 4'애플리케이션에서 'SimpleMembershipProvider'를 사용하고 있습니다. 응용 프로그램은 인트라넷에서 사용되며 승인되지 않은 사용자에게는 사용할 수있는 콘텐츠가 없으므로 사용자를 실제 사이트 콘텐츠로 보내기 전에 로그인을 강제로하고 싶습니다.ASP.NET MVC 4를 사용하여 사용자가 어떤 컨텐츠를보기 위해 로그인하게하는 방법 4

이것은 다소 사소한 작업이어야한다고 생각하지만, 처음으로 그런 논리를 구현해야하고 또한 그것을 수행하고 싶습니다. 조언을 구하기 위해 MVC 4/SimpleMemebrship 스타일을 사용하고 싶습니다.

나는 그것을 구현해야한다고 생각하는 방법은 Web.config의이를 추가하는 첫 번째 : 나는 그래서 그것을이 넣어 더 나은 것 같아요 익명 수 있도록 조치를 필요가 없습니다 결국

<authentication mode="Forms"> 
     <forms loginUrl="~/Account/Login" timeout="15" slidingExpiration="true" enableCrossAppRedirects="false" protection="All" /> 
    </authentication> 

이리.

그리고 내 기본 경로 변경 : 내가보기로

routes.MapRoute(
       name: "Default", 
       url: "{controller}/{action}/{id}", 
       defaults: new { controller = "Account", action = "Login", id = UrlParameter.Optional } 
      ); 

익명 수있는 유일한 행동 할 것이다. 그러나 기본 경로를 Login으로 변경하는 것에 대해 조금 걱정이됩니다. 이것이 예상치 못한 단점을 일으키지 않을지 확실하지 않습니다.

나는 또한 MVC 4 Internet Template에 의해 만들어진 기본 구조를 유지하는 아이디어가 바로 Home 컨트롤러 복용 책임의 Index 조치를두고 있지만 논리가 명확하기 때문에 나는이 시나리오를 좋아하지 않는다 - 사용자가 로그인해야 어떤 종류의 액세스를 얻기 위해서도 심지어는 Home/Index이 내 마음에 접근 할 수 있습니다.

그런 종류의 행동을 구현하는 방법은 무엇입니까? 이 기본 정보를 구현하기 위해해야 ​​할 기본 단계는 무엇입니까?

답변

19

Authorize 특성을 전역 필터로 등록하면이 작업을 수행 할 수 있습니다. 우는 소리가 RegisterGlobalFilters 방법을 같이하는 방법의 예입니다 : 장소에와

public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
{ 
    filters.Add(new HandleErrorAttribute()); 
    filters.Add(new AuthorizeAttribute()); 
} 

익명 사용자가 로그인 페이지에 액세스 할 수 있도록해야합니다. 이를 수행하려면 AllowAnonymous 속성을 사용하여 로그인 활동 메소드에 주석을 추가하십시오.

[AllowAnonymous] 
[HttpGet] 
public ActionResult Login() 
{ 
... 
} 

POST 요청을받는 로그인 동작 방법에 대해서도 동일하게 적용하십시오.