Ограничьте попытки входа в систему в Laravel и увеличьте время ограничения для отправки неверных учетных данных

Я работаю над веб-приложением, используя Laravel, и я хотел бы знать, возможно ли ограничить попытки входа в систему, например, если какой-либо пользователь вводит неправильные учетные данные 3 раза, ему нужно подождать 10 минут, чтобы снова войти в систему. Если он / она использует неправильные учетные данные 5 раз, ему / ей нужно подождать 30 минут.

Спасибо за вашу помощь !

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
1 923
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Для этого вы должны переопределить метод входа в LoginController.php.

Сначала определите два защищенных свойства для установки количества попыток и времени ограничения (в качестве первого условия).

protected $maxAttempts = 3;
protected $decayMinutes = 10;

Теперь переопределите метод входа в систему,

/**
 * [login - ovveride login method form AuthenticatesUsers Traits]
 * @param  Request $request [Login Request]
 * @return [type]           [description]
 */
public function login(Request $request)
{
    $this->validateLogin($request);
    
    if (auth()->attempt(['email' => $request->email, 'password' => $request->password])) {
       return redirect()->intended('home');
    }else{

        if ($this->hasTooManyLoginAttempts($request)) {

                $key = $this->throttleKey($request);
                $rateLimiter = $this->limiter();


                $limit = [3 => 10, 5 => 30];
                $attempts = $rateLimiter->attempts($key);  // return how attapts already yet

                if ($attempts >= 5)
                {
                    $rateLimiter->clear($key);;
                }

                if (array_key_exists($attempts, $limit)){
                    $this->decayMinutes = $limit[$attempts];
                }
                
                $this->incrementLoginAttempts($request);

                $this->fireLockoutEvent($request);
            return $this->sendLockoutResponse($request);

            }

            $this->incrementLoginAttempts($request);
        return $this->sendFailedLoginResponse($request);
    }
    
}

Другие вопросы по теме