Laravel: использование дроссельной заслонки в настраиваемом контроллере входа в систему

Это моя функция контроллера входа в систему

   use ThrottlesLogins;
   protected $maxLoginAttempts = 3;
   protected $lockoutTime = 300;

 public function login(Request $request)
    {       

        if ($this->hasTooManyLoginAttempts($request))
        {
        $this->fireLockoutEvent($request);
        return $this->sendLockoutResponse($request);
        }

        $validator = Validator::make(Input::all() , ['credential' => 'required|min:2|max:255', 'password' => 'required|string|min:8', ]);
        $cred = $request->credential;
        $pw = $request->password;
        $remember = (Input::has('remember')) ? true : false;

        if (filter_var($cred, FILTER_VALIDATE_EMAIL))
          {
          if (Auth::guard('customers')->attempt(['email' => $cred, 'password' => $pw, 'verified' => 1], $remember))
            {
            return redirect()->route('front');
            }
            else
            {
            return redirect()->route('customer-login-page')->with('error', 'Your credentials do not match');
            }
          }
          else
          {
            if (Auth::guard('customers')->attempt(['contact' => $cred, 'password' => $pw], $remember))
             {
              return redirect()->intended(route('front'));
             }
            else
            {
            return redirect()->route('customer-login-page')->with('error', 'Your credentials do not match');
            }
          }

    }



  protected function hasTooManyLoginAttempts(Request $request)
    {
       return $this->limiter()->tooManyAttempts(
           $this->throttleKey($request), $this->maxLoginAttempts, $this->lockoutTime
       );
    }

Это не работает. Я пробовал неудачные попытки входа более 3 раз, но все еще не удушал. А ТАКЖЕ Даже когда я отправляю правильные учетные данные, вход и перенаправление работают, но когда я проверяю запрос, я получаю

302 FOUND error

во вкладке сети

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать 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 014
2

Ответы 2

Вам необходимо сообщить трейту, что вы пытаетесь войти в систему, позвонив в $this->incrementLoginAttempts($request) (посмотреть код). Вы можете сделать этот вызов сразу после существующей проверки газа:

if ($this->hasTooManyLoginAttempts($request))
{
    $this->fireLockoutEvent($request);
    return $this->sendLockoutResponse($request);
}

$this->incrementLoginAttempts($request);

// other code

Спасибо. Я пробовал это. Оно работает. Но после попыток я получаю пустую страницу, а не сообщение

Sai Krishna 13.05.2018 18:09

Это интересно. sendLockoutResponse($request), кажется, бросает ValidationException, что означает, что return вообще ничего не делает. Может, вы попробуете вместо этого с try { } catch (ValidationException $e) { }? Хотя это не объясняет, как работает исходный код в трейте Аутентифицирует пользователей.

Namoshek 13.05.2018 18:33

Хорошо, после некоторого размышления над этим кажется, что ValidationException улавливается внутренним обработчиком исключений и соответственно преобразуется в Response. return перед исключением кажется безрезультатным. Поэтому я могу предположить, что вы внесли некоторые изменения в свой обработчик исключений или что-то еще не работает. Пожалуйста, посмотрите свои журналы.

Namoshek 13.05.2018 18:59

Пытаться

use Illuminate\Foundation\Auth\ThrottlesLogins;

Создан из

use ThrottlesLogins;

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