Как я могу настроить поле пароля в базовой HTTP-аутентификации Laravel?

Я хочу изменить поле password на user_password в запросе SQL при использовании соединения Базовая HTTP-аутентификация. Промежуточное ПО, которое я использую, auth.basic специфично для Laravel. Мне удалось изменить имя пользователя, создав промежуточное ПО, но я не могу изменить поле пароля.

class CustomBasicAuth extends AuthenticateWithBasicAuth
{
    public function handle($request, Closure $next, $guard = null, $field = null)
    {
        $this->auth->guard($guard)->basic($field ?: 'user_username');

        return $next($request);
    }
}

Я провел небольшое исследование и увидел, что мы должны попытаться модифицировать этот метод.

/vendor/laravel/framework/src/Illuminate/Auth/SessionGuard.php

class SessionGuard implements StatefulGuard, SupportsBasicAuth
{
    use GuardHelpers, Macroable;

    protected function basicCredentials(Request $request, $field)
    {
        return [$field => $request->getUser(), 'password' => $request->getPassword()];
    }
}

Кто-нибудь знает, как изменить его, не изменяя базовый файл?


person diego    schedule 12.04.2019    source источник
comment
Вы можете настраивать классы внешних пакетов, просто расширяя их и переопределяя методы, которые необходимо изменить. Может потребоваться расширение нескольких классов, чтобы изменить вызовы базового класса на ваш пользовательский.   -  person vvmul    schedule 12.04.2019
comment
Спасибо, вы помогли мне решить ее.   -  person diego    schedule 12.04.2019
comment
Хорошо, опубликую это как ответ на случай, если кто-то еще столкнется с той же проблемой :)   -  person vvmul    schedule 12.04.2019


Ответы (1)


Вы можете настраивать классы внешних пакетов, просто расширяя их и переопределяя методы, которые необходимо изменить. Может потребоваться расширение нескольких классов, чтобы изменить места, где вызывается базовый класс, на ваш пользовательский.

person vvmul    schedule 12.04.2019
comment
точнее, я создал класс SessionGuardExtended, который расширяет SessionGuard, а затем добавил в AppServiceProvider - person diego; 12.04.2019