如何使用ASP.NET MVC 4强制用户登录以查看任何内容



我正在开发一个"ASP.NET MVC 4"应用程序,并使用"SimpleMembershipProvider"。该应用程序将在intranet中使用,没有内容可供未经授权的用户使用,所以我想在允许用户访问实际网站内容之前强制登录。

我认为这应该是一项相当琐碎的任务,但这是我第一次必须实现这样的逻辑,我也想以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在我心目中也是某种访问权限。

那么,实现这种行为的方法是什么呢?为了实现这一权利,我应该采取哪些基本步骤和改变?

您可以通过将Authorize属性注册为全局过滤器来实现这一点。Bellow是RegisterGlobalFilters方法的一个示例:

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

这样一来,您就必须允许匿名用户访问登录页面。为此,您可以使用AllowAnonymous属性对Login操作方法进行注释。

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

对接收POST请求的Login操作方法执行相同操作。

相关内容

最新更新