Laravel — Custome Auth Throttlelogins

Я создал пользовательскую аутентификацию, и все работает нормально.
Теперь я пытаюсь добавить Throttlelogins, чтобы предотвратить множественные неправильные попытки входа в систему. Но The ThrottleLogins не загружается.

В: Что я здесь упускаю? или я что-то не так делаю?

Исключение:

Метод App\Http\Controllers\Auth\CustomersLoginController::hasTooManyLoginAttempts не существует.

    <?php

    namespace App\Http\Controllers\Auth;

    use Illuminate\Http\Request;
    use App\Http\Controllers\Controller;
    use Illuminate\Foundation\Auth\AuthenticatesUsers;
    use Illuminate\Validation\ValidationException;
    use Illuminate\Foundation\Auth\ThrottlesLogins;

    use Auth;

    class CustomersLoginController extends Controller
    {    
        public function __construct()
        {
            $this->middleware('guest:customers');
        }

        public function ShowLoginForm()
        {
            return view('auth.customer-login');
        }

        public function login(Request $request)
        {
            $v = $request->validate([
                'email' => 'required|email',
                'password' => 'required',
            ]);

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

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

            if(Auth::guard('customers')->attempt(['email'=>$request->email,'password'=>$request->password],$request->remember)){
                return redirect()->intended(route('customerdashboard'));
            };

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

        protected function sendFailedLoginResponse(Request $request)
        {
            throw ValidationException::withMessages([
                $this->username() => [trans('auth.failed')],
            ]);
        }
        public function username()
        {
            return 'email';
        }


    }

Сообщение об ошибке Может кто-нибудь объяснить, что я упускаю?


person Aldrick    schedule 03.05.2019    source источник
comment
Я не вижу, чем ваш логин отличается от логина Laravel по умолчанию? Есть ли конкретная причина, по которой вы не будете просто изменять/расширять и перезаписывать функции Laravel?   -  person killstreet    schedule 03.05.2019
comment
Мне нужен был отдельный логин. Один по умолчанию используется администраторами, а другой — клиентами. Вот почему я сделал два. Вот как я знаю, как это сделать. Есть ли лучший способ сделать multiAuth без использования каких-либо пакетов?   -  person Aldrick    schedule 03.05.2019
comment
Я всегда использовал один и тот же логин для обоих, никогда не сталкивался с проблемами с отображением определенного URL-адреса на панели администратора, только когда у текущего пользователя, вошедшего в систему, есть правильное разрешение. Это может зависеть от вашей настройки, являются ли администраторы и пользователи своими моделями или нет.   -  person killstreet    schedule 03.05.2019
comment
У меня разные модели и столы. Поэтому созданы отдельные охранники и целые разные авторы.   -  person Aldrick    schedule 03.05.2019
comment
Тогда имело бы смысл иметь другую аутентификацию, в этом случае нет реальной необходимости объединять их вместе.   -  person killstreet    schedule 03.05.2019


Ответы (1)


Ошибка говорит, что вам не хватает функции: hasTooManyLoginAttempts

При входе в функцию вы можете видеть, что она пытается вызвать функцию, но ее нет в вашем классе. Вот где это идет не так.

обновить

В классе AuthenticateUsers, который вы пытались скопировать, используется черта ThrottlesLogins, которой нет в вашем контроллере.

Обновите свой контроллер следующим образом:

class CustomersLoginController extends Controller
{    

    use ThrottlesLogins;

Еще одно обновление

Вы пытались импортировать черту, которую Laravel использует в своем собственном логине. Однако это не сработает, вот почему:

Когда вы определяете класс, он может иметь доступ только к другим классам в пределах своего пространства имен. Например, ваш контроллер определен в следующем пространстве имен.

namespace App\Http\Controllers\Auth;

Поэтому, чтобы использовать другие классы, вам нужно импортировать их из их собственных пространств имен, чтобы вы могли получить к ним доступ. например.:

use Illuminate\Foundation\Auth\ThrottlesLogins;

Теперь, когда вы импортировали ThrottlesLogins, который на самом деле является трейтом, теперь внутри класса вы используете его для предоставления всех внутренних методов.

person killstreet    schedule 03.05.2019
comment
Я заметил, что. Вот почему я импортировал Throttlelogins. Должны ли мы снова использовать ThrottlesLogins. Не могли бы вы объяснить, почему? логика. - person Aldrick; 03.05.2019
comment
использование внутри класса заключается в использовании признаков. использовать снаружи, чтобы импортировать пространства имен. - person killstreet; 03.05.2019
comment
@Thomas Обновлен ответ, чтобы он был более подробным Подробнее здесь - person killstreet; 03.05.2019