Вход в паспорт люмена с использованием имени пользователя или электронной почты
В настоящее время я работаю или 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, и он работает отлично, как я хотел.