MembershipReboot 锁定功能问题
MembershipReboot lockout functionality issue
这几天我一直在玩 MembershipReboot 框架,老实说它看起来非常好。我会将它用于我的应用程序。
但是,我的问题是关于它的锁定功能。我曾多次尝试锁定我的帐户,但似乎没有任何反应。这是我的配置
<membershipReboot requireAccountVerification="true" emailIsUsername="false" multiTenant="false" allowAccountDeletion="true" passwordHashingIterationCount="0" accountLockoutDuration="00:05:00" passwordResetFrequency="0" accountLockoutFailedLoginAttempts="2" />
似乎在我第三次甚至第四次尝试时,我可以毫无问题地登录。我还调查了 Membership 使用的数据库,但我找不到锁定帐户的任何标志。
我的问题是 - 锁定功能是否已经开箱即用,或者我必须在那里执行我的逻辑?如果实施了,我可以启用它吗?
MembershipReboot 中的帐户锁定使用 security settings configuration
中的两个属性
- AccountLockoutFailedLoginAttempts(整数,默认值:10):帐户被锁定前密码登录尝试失败的次数。
- AccountLockoutDuration(时间跨度,默认值:5 分钟):由于密码登录尝试失败次数过多,帐户将被锁定的持续时间。
在您的设置中,您正在覆盖默认值。因此,如果您在 5 分钟内尝试超过 2 次失败的登录尝试 window,您的帐户将从上次登录失败后再锁定 5 分钟。如果您在上次登录失败后五分钟尝试登录,您将登录,因为根据锁定逻辑该帐户未被锁定。如果您尝试在 5 分钟内登录并且失败的尝试次数没有超过,您仍然可以登录。
代码胜于文字(Check VerifyPassword method)
您将在 UserAccounts table 中看到帐户锁定所需的所有属性。即 LastFailedLogin 和 FailedLoginCount
protected virtual bool CheckHasTooManyRecentPasswordFailures(TAccount account)
{
var result = false;
if (Configuration.AccountLockoutFailedLoginAttempts <= account.FailedLoginCount)
{
result = account.LastFailedLogin >= UtcNow.Subtract(Configuration.AccountLockoutDuration);
if (!result)
{
// if we're past the lockout window, then reset to zero
account.FailedLoginCount = 0;
}
}
if (result)
{
account.FailedLoginCount++;
}
return result;
}
这几天我一直在玩 MembershipReboot 框架,老实说它看起来非常好。我会将它用于我的应用程序。
但是,我的问题是关于它的锁定功能。我曾多次尝试锁定我的帐户,但似乎没有任何反应。这是我的配置
<membershipReboot requireAccountVerification="true" emailIsUsername="false" multiTenant="false" allowAccountDeletion="true" passwordHashingIterationCount="0" accountLockoutDuration="00:05:00" passwordResetFrequency="0" accountLockoutFailedLoginAttempts="2" />
似乎在我第三次甚至第四次尝试时,我可以毫无问题地登录。我还调查了 Membership 使用的数据库,但我找不到锁定帐户的任何标志。
我的问题是 - 锁定功能是否已经开箱即用,或者我必须在那里执行我的逻辑?如果实施了,我可以启用它吗?
MembershipReboot 中的帐户锁定使用 security settings configuration
中的两个属性- AccountLockoutFailedLoginAttempts(整数,默认值:10):帐户被锁定前密码登录尝试失败的次数。
- AccountLockoutDuration(时间跨度,默认值:5 分钟):由于密码登录尝试失败次数过多,帐户将被锁定的持续时间。
在您的设置中,您正在覆盖默认值。因此,如果您在 5 分钟内尝试超过 2 次失败的登录尝试 window,您的帐户将从上次登录失败后再锁定 5 分钟。如果您在上次登录失败后五分钟尝试登录,您将登录,因为根据锁定逻辑该帐户未被锁定。如果您尝试在 5 分钟内登录并且失败的尝试次数没有超过,您仍然可以登录。
代码胜于文字(Check VerifyPassword method) 您将在 UserAccounts table 中看到帐户锁定所需的所有属性。即 LastFailedLogin 和 FailedLoginCount
protected virtual bool CheckHasTooManyRecentPasswordFailures(TAccount account)
{
var result = false;
if (Configuration.AccountLockoutFailedLoginAttempts <= account.FailedLoginCount)
{
result = account.LastFailedLogin >= UtcNow.Subtract(Configuration.AccountLockoutDuration);
if (!result)
{
// if we're past the lockout window, then reset to zero
account.FailedLoginCount = 0;
}
}
if (result)
{
account.FailedLoginCount++;
}
return result;
}