24

我正在使用 ASP.NET MVC 4 和 C# 创建一个 Web 应用程序。

我希望所有用户在使用应用程序之前都已登录。

我正在使用带有自定义数据库的 ASP.NET 成员资格。

一种方法是检查Membership.GetUser()每个函数是否为空。

但是没有比在每个函数中检查用户登录状态更简单的方法了吗?(也许检查 web.config、global.asax 等...??)

4

6 回答 6

53

当然,用它来装饰你的动作或整个班级,[Authorize]这将要求用户首先登录。

于 2012-07-26T15:21:59.530 回答
13

覆盖[Authorize]您只希望登录用户访问的每个操作。您也可以在控制器级别执行此操作,从而确保控制器内的所有操作都是安全的。后者可能最适合您,因为您可能只想为访客禁用所有页面。

这是类级别的样子:

[Authorize]
public class SomethingController
{
    //...
}

这是一个动作级别的:

public class SomethingController
{
    [Authorize]
    public ActionResult SomeAction(Parameter someParameter)
    {
        //...   
    }
}

如果您的所有或大部分页面使用相同的母版页,另一种方法是放置:

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

或者如果你不使用剃刀语法,

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

在母版页中。这样,如果用户未登录,所有使用该母版页的页面都将重定向到其他地方。但这仅适用于您使用内置身份验证的情况。 注意:此选项远不如第一个选项安全。仅当站点安全不是大问题时才使用此选项

于 2012-07-26T15:31:31.957 回答
6

我知道这个问题已经有了答案,但如果打算锁定整个应用程序,除了少数几个控制器操作,那么我觉得这是一个更好的解决方案......

在您的应用程序的启动/初始化中添加...

httpConfig.filters.Add(new AuthorizeAttribute());

...然后在您不想保护的操作...

[AllowAnonymous]
public ActionResult Hello() { return View(); }
于 2017-09-13T10:04:43.663 回答
4

您可以将[Authorize]属性放在控制器中或控制器中的单个方法中,以便您选择谁可以打开操作以及具有哪些权限。您还可以使用以下角色进行授权:[Authorize(Roles="Admin")]您将仅授权具有管理员角色的用户访问您的操作/控制器。例如:

[Authorize(Roles="SimpleUser")] or with no roles [Authorize]
public ActionResult Index()
{
    return View();
}

[Authorize]
[HttpPost]
public ActionResult Index(FormCollection form)
{
    ... whatever logic
    return View();
}

希望这可以帮助 ;]

于 2013-12-03T21:46:23.907 回答
4

您可以编写自定义[Authorize]属性。然后简单地用它装饰控制器/动作,或者如果所有动作都需要授权,您可以将其注册为全局动作过滤器。

于 2012-07-26T15:22:06.867 回答
2

在类级别使用 [Authorize]

如果您想允许匿名访问某些操作,请使用 [AllowAnonymous]

于 2013-06-24T06:26:46.887 回答