我尝试在 .NET Core Web API 中实现的目标是防止默认帐户锁定行为。默认情况下,锁定的帐户将在 5 分钟后解锁。在我的系统中,锁定的帐户只能由管理员“解锁”。 在
startup.cs
中,
Identity
服务配置为:services.AddIdentity<ApplicationUser, IdentityRole>(config =>
{
config.Lockout = new LockoutOptions()
{
MaxFailedAccessAttempts = 3,
DefaultLockoutTimeSpan = new TimeSpan(Int32.MaxValue, 0, 0, 0)
};
});
因此有一个属性可以设置
DefaultLockoutTimeSpan
,我尝试使 TimeSpan 尽可能大(它接受 Int32),但它抛出了
TimeSpan overflowed because the duration is too long.
异常。我也尝试过
DefaultLockoutTimeSpan = new TimeSpan(-1)
,但没有成功。
有人有防水方法来防止锁定帐户(一段时间后)自动解锁吗?或者,不太优选的一种使 TimeSpan 尽可能大的方法?
和可选的 IUserLockoutStore.SetLockoutEndDate 锁定检查所做的只是查看是否启用了锁定,如果启用了,则检查结束日期是否已过。如果您从
DateTimeOffset.MaxValue
返回
GetLockoutEndDateAsync
,那么如果设置了标志,并且无论 LockoutOptions
或数据库中设置了什么,它们将始终被锁定。
然后您可以将 Set 方法重写为无操作,并且根本不存储结束日期。
1.您可以将
manager.UserLockoutEnabledByDefault = true;
manager.DefaultAccountLockoutTimeSpan = TimeSpan.FromMinutes(5);
manager.MaxFailedAccessAttemptsBeforeLockout = 5;