asp 未设置核心锁定 LockoutEnabled

asp core Lockout not set LockoutEnabled

在 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. 初始数据库状态

  1. 首次登录失败

  1. 第二次登录失败

  1. 第三次登录失败

决赛

LockoutEnd = + 一年(一切正常)

LockoutEnabled == 0 (false) 用户未锁定,可以登录

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

可能是哪些原因?

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

Gets or sets a flag indicating if the user could be locked out.

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

这样您可以设置 "normal" 用户 LockoutEnabled=true 和一些 "special admin users" LockoutEnabled=false。 (如果 "evil people" 通过简单地尝试登录几次来锁定您的管理员,那将是糟糕的 - 举个例子,这可能是有意义的。)

如果使用

配置新用户的 LockoutEnabled 默认为 true
LockoutOptions.AllowedForNewUsers 

Gets or sets a flag indicating whether a new user can be locked out. Defaults to true.

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

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