В настоящее время я работаю или 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());
}
Теперь, когда я обновляю каталог вендора каждый раз, мне нужно изменить этот код.
Любой простой метод, с помощью которого я могу терпеть эту головную боль.
Любая помощь приветствуется
Заранее спасибо.
Я не знал, что это так просто, я просто попробовал сегодня, и мне это удалось,
public function findForPassport($username){
return $user = (new User)->where('email', $username)->orWhere('username', $username)->first();
}
Я просто добавляю этот метод в App \ User.php и это работает отлично, как я хотел.
Других решений пока нет …