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

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

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

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

продавец / Laravel / паспорт / 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 и это работает отлично, как я хотел.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]