Вход в паспорт люмена с использованием имени пользователя или электронной почты

В настоящее время я работаю или lumen(микрофрейм Laravel), в это приложение встроен паспорт для входа пользователя.

Я застрял, когда клиент сказал мне, что нам нужно войти с обоими, имя пользователя или адрес электронной почты!

Я сделал это, изменив внутренний код паспортов люмена, как показано ниже

vendor/laravel/passport/src/Bridge/UserRepository.php в этом я обновил код функции getUserEntityByUserCredentials, чтобы

public function getUserEntityByUserCredentials($username, $password, $grantType, ClientEntityInterface $clientEntity)
{
     $provider = config('auth.guards.api.provider');

     if (is_null($model = config('auth.providers.'.$provider.'.model'))) {
         throw new RuntimeException('Unable to determine user model from configuration.');
     }

     if (method_exists($model, 'findForPassport')) {
         $user = (new $model)->findForPassport($username);
     } else {
         $user = (new $model)->where('email', $username)->orWhere('username', $username)->first();
     }


     if (! $user ) {
         return;
     } elseif (method_exists($user, 'validateForPassportPasswordGrant')) {
         if (! $user->validateForPassportPasswordGrant($password)) {
             return;
         }
     } elseif (! $this->hasher->check($password, $user->password)) {
         return;
     }

     return new User($user->getAuthIdentifier());
}

Теперь, когда я обновляю каталог поставщика каждый раз, когда мне нужно изменить этот код.

Любой простой метод, с помощью которого я могу терпеть эту головную боль.

Любая помощь приветствуется Спасибо заранее.

1 ответ

Решение

Я не знал, что это было так просто, я просто попробовал сегодня, и мне это удалось,

public function findForPassport($username){
    return $user = (new User)->where('email', $username)->orWhere('username', $username)->first();
}

Я просто добавляю этот метод в App\User.php, и он работает отлично, как я хотел.

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