2013-02-26 63 views
1

我已经用C#在ASP.NET MVC4中编写了一个webApp。我使用FormsAuthentication.SetAuthCookie(username,true)登录用户;方法。检查每个控制器方法中的登录状态

现在我想检查每个控制器的登录状态。如果没有人登录,则应将用户重定向到登录控制器视图。我不想手动将这段代码添加到每个控制器。

任何想法,如何做到这一点?

+1

控制器 – 2013-02-26 15:44:29

+1

上使用[授权]属性或者,注册一个全球授权过滤器,从而可以省略授权属性在每个控制器上。您仍然可以通过AllowAnonymous属性允许匿名访问。 – fjdumont 2013-02-26 15:47:46

回答

2

使用[AuthorizeAttribute]来实现你所需要的。例如:

public class AccountController : Controller 
{ 

    [Authorize] 
    ActionResult ActionRequiringAuthorization()... 
    .... 

    [AllowAnonymous] //Will allow both, authenticated and non-authenticated requests 
    ActionResult PublicAction() ... 
} 

如果用户不再验证,他会在试图执行饰有授权属性的任何行动重定向到登录页面。

可以装点整个控制器相同的属性适用于所有操作,如:

[Authorize] 
public class AccountController : Controller 
+0

您还可以检查用户是否使用User.Identity.IsAuthenticated在您的控制器方法中进行了身份验证。但是,控制访问的最佳方式是提到的属性@Icarus。这些也可以配置为像这样的特定角色[Authorize(Roles =“role1,role2”)] – amhed 2013-02-27 15:11:33