パスワード試行ウィンドウと呼ばれるものが必要です。
基本的に、データベース内の2つのフィールド、1つはLastPasswordAttempt(datetime)、もう1つはPasswordAttemptCount(int)
次に、ログインするたびに、最後のLastPasswordAttemptがいつ発生したかを確認し、最後の10分間であるかどうかを確認します。PasswordAttemptCountをインクリメントします。それ以外の場合は、0(または失敗したため1)にリセットします。
同じロジックで、PasswordAttemptCountが5以上であるかどうかを確認します。そうである場合は、ユーザーアクセスを拒否します。数時間または1日の間それらをロックアウトする3番目のフィールドを持つことができます。
つまり、CanLoginAfter(datetime)は、最後にパスワードを試行してから1日を設定できます。
これがお役に立てば幸いです