3

如果进行了 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 值并显示消息说您的帐户被锁定,需要管理员解锁。

4

0 回答 0