2013-11-22 32 views
6

我正在研究'ASP.NET MVC 4'应用程序并使用'SimpleMembershipProvider'。该应用程序将在Intranet中使用,并且没有可用于未授权用户的内容,因此我希望在让用户访问实际网站内容之前强制登录。如何强制用户使用ASP.NET MVC 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行动,但由于逻辑是清楚的,我不喜欢这个方案 - 用户必须登录为了获得任何形式的访问,甚至在我心中都有一些访问权限。

那么实现这种行为的方式是什么?为了实现这一权利,我应该做些什么基本步骤?

回答

19

您可以通过注册Authorize属性作为全局过滤器来实现此目的。贝娄是你RegisterGlobalFilters方法应该怎么看起来像一个例子:

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

本的地方,你就必须允许匿名用户访问登录页面。为此,请使用AllowAnonymous属性注释您的登录操作方法。

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

对接收POST请求的登录操作方法做同样的事情。

相关问题