在Asp.Net标识2中阻止用户

时间:2014-10-08 01:32:53

标签: c# asp.net asp.net-identity

出现了这样的问题,我需要阻止用户。 我找到了函数:" SetLockoutEndDate"和#34; SetLockoutEnabled"。但不是其中之一,我无法帮助。第一个函数运行良好,它会阻塞,但只有当用户注销并停止时。我需要在消息出现后锁定用户。我们怎样才能在asp.net identity 2中实现锁定成员?

1 个答案:

答案 0 :(得分:0)

您最好实施自己的逻辑以防止用户登录。您可以实施"锁定"或"已禁用" ApplicationUser实体中的属性。这将使您更好地控制逻辑。

至于如何阻止用户在他被阻止后立即继续使用该应用程序,您可以使用AuthenticationManager类对其进行签名,如下所示:< / p>

var autheticationManager = HttpContext.GetOwinContext().Authentication;
autheticationManager.SignOut();

当用户再次尝试登录时,您的逻辑应该阻止它。

或者,您可以使用您提到的SetLockoutEndDate方法,但这只会锁定用户,直到指定的&#34;日期时间偏移&#34;到达了。 SetLockoutEnabled不会锁定用户,但会启用锁定功能。如果您选择使用内置锁定,您仍然可以像我提到的那样退出用户,这将阻止他/她登录。

修改

正如您在评论中提到的,您在实施全局过滤器时遇到问题,这些过滤器会阻止未经授权的用户访问您的应用程序。

您需要做的第一件事是实现IAuthorizationFilter或简单地创建一个派生自AuthorizeAttribute的类。使用后者的优点是您仍然可以将其用作属性。

有关详细信息,请参阅:how to create custom authorize filter in asp.net mvc3

之后,您需要全局注册过滤器,这样您就不必在每个操作中手动实施过滤器。为此,请在global.asax文件中将其添加到Application_Start

protected void Application_Start()
{
    ...
    GlobalFilters.Filters.Add(new YourFilter());
    ...
}