Сделать нужно так: одновременно принимать не более 2х запросов на аутентификацию для одного аккаунта. Два запроса (а не один) нужно разрешить, чтобы ламеры нажимающие даблклик не парили вам головной мозг, что “сайт не работает”. После неправильного запроса на аутентификацию – нужно делать паузу, в течении которой тому же аккаунту запрещено аутентифицироваться, пауза может быть статической, типа 15 секунд или возрастающей каждый раз скажем на 2 секунды, брутфорсилка её быстро загонит до больших значений, что сделает подбор пароля невозможным, а юзер сделавший случайную опечатку – просто не заметит. У меня всё это реализовано через создание файла на сервере, логически связанного с аккаунтом, для которого происходит попытка аутентификации. В файл каждый раз дописывается время запроса (с помощью дописывания в конец – меньше шансов случайно стереть файл, даже с блокировкой), при успешной аутентификации файл стирается.