ASP.Net Identity 2.0 AccessFailedCount不递增
昨晚我正在使用FormsAuthentication开发一个新项目,并且正在自定义票证以包含安全令牌,因此如果用户在一个浏览器中注销,则会在所有这些注册表中注销。 在查看ASP.net Identity的最新版本时,看起来它已经内置了这个function。
我创建了一个新的测试MVC 5 Web应用程序,启用了个人帐户。 注册和身份validation开箱即用。
但是,我注意到失败的登录尝试没有增加AspNetUsers表中的AccessFailedCount字段。 由于这不会增加,我可以尝试尽可能多的失败登录尝试,而不会让帐户被锁定。
如何在ASP.net Identity 2.0上启用AccessFailedCount和Lockoutfunction?
您必须手动处理此问题。 CheckPassword
方法调用PasswordHasher.VerifyHashedPassword
方法来validation密码,但是当提供的密码与现有密码不匹配时,它不会更新访问失败计数。
以下是支持锁定的authenticate方法的示例:
UserManager userManager = new UserManager (new UserStore()); if (userManager.SupportsUserLockout && userManager.IsLockedOut(userId)) return; var user = userManager.FindById(userId); if (userManager.CheckPassword(user, password)) { if (userManager.SupportsUserLockout && userManager.GetAccessFailedCount(userId) > 0) { userManager.ResetAccessFailedCount(userId); } // Authenticate user } else { if (userManager.SupportsUserLockout && userManager.GetLockoutEnabled(userId)) { userManager.AccessFailed(userId); } }
还有PasswordSignInAsync接受“shouldLockout”参数。 将此设置为true将自动增加失败的登录尝试
var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: true);
对于.NET Core 2.1, shouldLockout现在名为lockoutOnFailure
因此,您的登录调用应如下所示,以增加失败的登录尝试次数:
var result = await SignInManager.PasswordSignInAsync(loginModel.Email, loginModel.Password, loginModel.RememberMe, lockoutOnFailure: true);
一旦用户成功登录,这也将重置失败的登录尝试
- 如何使用WebRequest来发布一些数据并读取响应?
- 从ASP.NET WebForms迁移到MVC
- 使用Identity 2.0数据库来validationASP.NET Core 1.0应用程序
- 将参数从silverlight传递到ASP.net
- Devexpress ASPxGridView GetSelectedFieldValues无法获取值
- 无法绑定到DataSource上的属性或列名称。 参数名称:dataMember
- 使用ListBoxFor和DropDownListFor Helpers的ASP.NET MVC模型绑定
- 如何确定字符串是否包含字符串列表的任何匹配项
- 为什么在具有不同名称的文件中为资源文件生成的类?