C# PasswordSignInAsync()和MaxFailedAccessAttempts究竟如何连接?
因此,该方法有最后一个参数C# PasswordSignInAsync()和MaxFailedAccessAttempts究竟如何连接?,c#,asp.net-core,asp.net-core-identity,C#,Asp.net Core,Asp.net Core Identity,因此,该方法有最后一个参数lockoutOnFailure,如果为true,则在用户输入错误凭据时锁定用户。但是已经有一个名为的属性,它在(默认情况下)5次成功事件之后锁定用户 我在这里有点困惑,并且找不到这个方法如何准确地基于第四个参数工作的答案。如果已经为何时锁定设置了选项,为什么我们需要设置lockoutOnFailure?我不想把它设为真 我如何理解它的工作原理: 如果lockoutOnFailure:true,则即使是用户首次尝试登录,如果他们输入了错误的凭据,也会被锁定。如果lock
lockoutOnFailure
,如果为true,则在用户输入错误凭据时锁定用户。但是已经有一个名为的属性,它在(默认情况下)5次成功事件之后锁定用户
我在这里有点困惑,并且找不到这个方法如何准确地基于第四个参数工作的答案。如果已经为何时锁定设置了选项,为什么我们需要设置lockoutOnFailure?我不想把它设为真
我如何理解它的工作原理:
如果
lockoutOnFailure:true
,则即使是用户首次尝试登录,如果他们输入了错误的凭据,也会被锁定。如果lockoutOnFailure:false
,则即使这是他们的第五次尝试,如果他们输入了错误的凭据,也不会被锁定。我不希望这两种情况都发生,所以我不想将其设置为任何一个值。我该怎么办?还是我理解的方法错了?ASP.NET核心标识是开源的,这意味着您可以轻松查看代码。PasswordSignInAsync最终调用方法
哪一个
if (UserManager.SupportsUserLockout && lockoutOnFailure)
{
// If lockout is requested, increment access failed count which might lock out the user
await UserManager.AccessFailedAsync(user);
if (await UserManager.IsLockedOutAsync(user))
{
return await LockedOut(user);
}
}
这意味着,MaxFailedAccessAttempts
可以全局设置,但除非使用lockoutOnFailure
调用登录方法,否则不会对其进行检查
文档已经注意到了这一点,但其措辞有点奇怪:
获取或设置锁定用户之前允许的失败访问尝试次数(假设已启用锁定)。默认值为5
lockoutOnFailure
参数是启用机制。PasswordSignInAsync
的文档清楚地说明了这一点
指示在登录失败时是否应锁定用户帐户的标志
如果标志设置为false
,则失败的尝试不会增加失败的登录计数器
但是,一旦帐户被锁定,PasswordSignInAsync
将返回LockedOut
结果,即使lockedonfail
设置为false。此参数仅确定计数器是否会在发生故障时增加(并且一旦超过将帐户标记为已锁定) 这就是令人困惑的地方。“指示登录失败时是否应锁定用户帐户的标志”和“指示登录失败时FailedAccessAttempts计数将增加的标志”不是一回事。对我来说,第一个意味着它不关心计数,如果失败,它将锁定,即使是第五次尝试。第二个,对我来说,意味着它将使用通用机制(计算它失败的次数)。但事实证明,第二个是正确的。非常感谢。