如果成功尝试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);
}
所以user是我在db中创建的一个视图,我从aspnetdb表中获取值,如果大于3次尝试,我将aspnet db table上的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属性为false,FailedPasswordAttemptCount永远不会增加,所以我永远不会达到锁定帐户的6值,并显示消息说你的帐户被锁定需要管理员解锁。