3 回の試行が成功した場合にユーザー アカウントを 30 分間ロックする方法と、6 回の試行が行われた場合にアカウントがロックされ、管理者のロック解除が必要になるようにする方法を教えてください。
したがって、私のWeb構成には次のものがあります。
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 プロパティが false であると想定しているため、FailedPasswordAttemptCount はインクリメントされないため、アカウントをロックし、アカウントがロックされていることを示すメッセージを表示する 6 の値に達することはありません。管理者のロック解除が必要です。