强制用户登录MVC

时间:2015-10-13 18:01:36

标签: c# asp.net-mvc

我有一个MVC 5站点(基于nopCommerce),我需要强制所有用户登录。我过去用其他语言完成它的方式是检查页面标题(所以它在每个页面)如果用户登录,如果不登录则重定向到登录页面。但是,我不知道在MVC中实现这一目标的正确方法。我发现其他答案说重定向在MVC中不是一件好事,这很好,但我无法弄清楚如何正确地完成这个。如何将所有未授权用户重定向到登录页面?

3 个答案:

答案 0 :(得分:5)

你可以添加" AuthorizeAttribute" in" RegisterGlobalFilter"在App_Start中,如下所示:

public class FilterConfig
{
    public static void RegisterGlobalFilter(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());
        filters.Add(new AuthorizeAttribute());
    }
}

并且在Global.asax的Application_Start中,您应该注册此过滤器:

    protected void Application_Start()
    {
        FilterConfig.RegisterGlobalFilter(GlobalFilters.Filters);

         .
         .
         .
    }

以及您不需要用户注册的每个控制器,您可以使用" AllowAnonymous"控制器中的操作属性如下:

[AllowAnonymous]
public ActionResult Login()
{
    //do something
}

有关详情,请点击此Link

答案 1 :(得分:2)

您需要使用Authorize属性。

关于重定向,来自MSDN:

  

如果未经授权的用户尝试访问标记为的方法   在Authorize属性中,MVC框架返回401 HTTP状态   码。如果站点配置为使用ASP.NET窗体身份验证,   401状态代码导致浏览器将用户重定向到   登录页面。

因此,您可以在 web.config 中对登录视图应用重定向,或者如果您正在使用ASP.NET表单身份验证,那么它应该根据需要重定向到登录页面。

有四种实现Authorize属性的方法,全局,每个控制器,每个控制器方法或每个视图。

<强>全局:

您可以添加&#34; AuthorizeAttribute&#34; in&#34; RegisterGlobalFilter&#34;在App_Start中,如下所示:

public class FilterConfig
{
    public static void RegisterGlobalFilter(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());
        filters.Add(new AuthorizeAttribute());
    }
}

并且在Global.asax的Application_Start中,您应该注册此过滤器:

protected void Application_Start()
{
    FilterConfig.RegisterGlobalFilter(GlobalFilters.Filters);

    . . .
}

每个控制器:

[Authorize] 
public class AccountController : Controller
{
    . . .
}

按控制器方法:

public class AccountController : Controller
{
    . . .

    [AllowAnonymous]
    public ActionResult Register() { . . . }

    [Authorize]
    public ActionResult Manage() { . . . }

    . . .
}

每次观看:

<!-- With razor syntax -->

<script type="text/javascript>
    @if(!Request.IsAuthenticated) {
        window.location.href = redirectURL;
    }
</script>

<!-- Without razor syntax -->

<script type="text/javascript>  
    <% if(!Request.IsAuthenticated) { %>
        window.location.href = redirectURL;
    <% } %>
</script>

Iraj的全球方法回答。

答案 2 :(得分:1)

如果您想授权所有控制器,您可以这样做...

在Global.asax中放入Application_Start

GlobalFilters.Filters.Add(new AuthorizeAttribute());