MVC项目中的授权

时间:2013-02-13 11:20:20

标签: c# asp.net-mvc model-view-controller

我在MVC项目中有登录页面,我创建了授权配置。

  <authentication mode="Forms">
      <forms loginUrl="~/Account/LogOn" timeout="2880"  defaultUrl="~/Home/Index"/>
    </authentication>

  <system.web>
    <authorization>
      <deny users="?"/>
    </authorization>
  </system.web>

如何在注册页面中访问?

3 个答案:

答案 0 :(得分:3)

根据您使用的MVC版本,我现在在MVC3 / 4中看到的是通过将Authorize()添加为全局,而不是限制对特定操作的访问,以限制对所有操作的访问过滤,然后使用AllowAnonymous()属性授予对一些选择操作的访问权限,以充当不需要保护的操作的白名单。 (如登录,注册等)。

<强>的global.asax

protected void Application_Start()
{
    filters.Add(new AuthorizeAttribute());
}

<强> AccountsController.cs

[AllowAnonymous]
public ActionResult Login()
{
    //Perform login...
}

然后你 web.config 就是这个

<authorization>
    <allow users="*" />
</authorization>

答案 1 :(得分:0)

默认情况下,您应该转到Register()控制器的Account操作方法

  

// GET:/ Account / Register

根据你的web.config:尝试在<system.web>标记之前将其添加到web.config。

 <location allowOverride="true" path="Account/Register">
    <system.web>
      <authorization>
        <allow users="?" />
        <deny users="*" />
      </authorization>
    </system.web>
  </location>

答案 2 :(得分:0)

尼克·阿尔布雷希特(Nick Albrecht)+1,但我发现“过滤器”含糊不清,因此我不得不进一步挖掘。

实际上,似乎     filters.Add(new AuthorizeAttribute()); 该代码属于App_Start

public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());
        filters.Add(new AuthorizeTokens.AuthorizeWithMessage());
    }
}

FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters)在Application_Start中被调用。