如果进行了 3 次成功尝试,我如何将用户帐户锁定 30 分钟,但如果进行 6 次尝试,该帐户将被锁定,需要管理员解锁。
所以在我的网络配置中,我有:
maxInvalidPasswordAttempts="6"
这很好,因为如果在 aspnetdb 表中进行了 6 次无效尝试,我可以看到 IsLockedOut 设置为 true。但是我正在尝试以此为基础,以便如果用户输入错误的详细信息 3 次,我会执行以下操作:
if (user.FailedPasswordAttemptCount > 3)
{
memberUser.IsApproved = false;
ModelState.AddModelError("", "Your account has been locked out for 30 minutes. Please retry after this time has elasped. Note 3 further wrong entries " +
"will result in your account being locked requiring Admin reset");
membershipService.UpdateUser(memberUser);
}
所以用户是我在我的数据库中创建的一个视图,我从 aspnetdb 表中获取值,如果尝试超过 3 次,我将 aspnet db 表上的 isApproved 属性设置为 false。
在我的登录方法中,我有以下内容:
if (memberUser.IsApproved == false)
{
DateTime PasswordFailedTime = user.FailedPasswordAttemptWindowStart.AddMinutes(30);
DateTime CurrentTime = DateTime.UtcNow;
if (CurrentTime > PasswordFailedTime)
{
memberUser.IsApproved = true;
membershipService.UpdateUser(memberUser);
}
}
因此,如果自失败时间起已过去 30 分钟,请重新批准该帐户。问题是即使我在屏幕上说等待 30 分钟 - 如果用户再次尝试 3 次我想锁定帐户。但是因为我假设 IsApproved 属性为假,所以 FailedPasswordAttemptCount 永远不会增加,所以我永远不会达到锁定帐户的 6 值并显示消息说您的帐户被锁定,需要管理员解锁。