ASP核心锁定未设置LockoutEnabled

时间:2018-11-29 11:14:25

标签: c# asp.net-core owin

在Startup.cs中尝试3次登录后,通过自动锁定用户身份来初始化身份

var lockoutOptions = new LockoutOptions()
{
    AllowedForNewUsers = true,
    DefaultLockoutTimeSpan = TimeSpan.FromDays(365),
    MaxFailedAccessAttempts = 3
};
services.AddIdentity<ApplicationUser, IdentityRole>(x =>
{
    x.Lockout = lockoutOptions;
})

登录AccountController.cs

var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure: true);
  1. 初始数据库状态

enter image description here

  1. 首次失败登录

enter image description here

  1. 第二次失败登录

enter image description here

  1. 第三次失败登录

enter image description here

最终

LockoutEnd = +一年(都可以)

LockoutEnabled == 0(否) 用户未锁定并可以登录

为什么'LockoutEnabled'不是1(true)

可能是什么原因?

1 个答案:

答案 0 :(得分:2)

LockoutEnabled属性指示可以锁定用户。这并不意味着该用户当前被禁止。

  

获取或设置一个标志,指示是否可以将用户锁定。

https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.identity.identityuser-1.lockoutenabled?view=aspnetcore-2.1

这样,您可以设置具有LockoutEnabled = true的“普通”用户和具有LockoutEnabled = false的一些“特殊管理员用户”。 (如果“邪恶的人”仅通过尝试登录几次就锁定了您的管理员,那将是很糟糕的-例如,在这种情况下,这样做很有意义。)

如果使用以下配置将新用户的LockoutEnabled默认设置为true

LockoutOptions.AllowedForNewUsers 
  

获取或设置一个标志,该标志指示是否可以锁定新用户。   默认为true。

https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.identity.lockoutoptions.allowedfornewusers?view=aspnetcore-2.1

在您的代码示例中将其设置为true,所以我猜您是在创建测试用户后更改了它,或者在某处/进行了数据库更新以进行测试,因此对于所有现有数据库,您都必须手动将其设置为true用户。 (应正确添加新用户。)