Intereting Posts
PHP – ошибка «заголовки уже отправлены» в зависимости от длины вывода? Как использовать метод jquery $ .post () для отправки значений формы Как отключить ручной ввод для поля JQuery UI Datepicker? Шифрование / расшифровка RSA, совместимая с Javascript и PHP Создать дату / время, когда формат неизвестен Потребление памяти PDO / MySQL с большим набором результатов Regex для соответствия цветам CSS Существуют ли какие-либо библиотеки PHP для разбора ASN.1 или генерирования PHP-кода на его основе? Вложенные 'for' циклы в PHP для создания иерархического неупорядоченного списка Корзина Woocommerce добавляет дополнительные теги <p> Как изменить папку просмотра в Laravel5? Как я могу захватить результат var_dump в строку? PDO были затронуты строк во время выполнения оператора PHPUnit – запуск определенного набора тестов через тестовый бегун командной строки проблема с AddHandler в htaccess

Пользовательский Laravel Passport BearerTokenResponse

В настоящее время у меня есть установка Laravel с использованием Laravel Passport (который использует league/oauth2-server для реализации сервера). Я хотел бы вернуть идентификатор пользователя, когда выделен маркер oauth2, поэтому я могу использовать его для идентификации пользователя, прошедшего проверку подлинности, в моем приложении EmberJS.

Предлагаемый способ:

Создайте свой собственный класс:

 use League\OAuth2\Server\ResponseTypes\BearerTokenResponse; use League\OAuth2\Server\Entities\AccessTokenEntityInterface; class UserIdBearerTokenResponse extends BearerTokenResponse { protected function getExtraParams(AccessTokenEntityInterface $accessToken) { return [ 'user_id' => $this->accessToken->getUserIdentifier() ]; } } 

Изменение AuthorizationServer.getResponseType() в vendor/league/oauth2-server/src

 protected function getResponseType() { if ($this->responseType instanceof ResponseTypeInterface === false) { // Return my own class instead of provided one $this->responseType = new UserIdBearerTokenResponse(); } $this->responseType->setPrivateKey($this->privateKey); return $this->responseType; } 

Но для этого подхода мне необходимо добавить файл vendor/league/oauth2-server/src/AuthorizationServer.php в мой vendor/league/oauth2-server/src/AuthorizationServer.php git.

Это кажется мне очень грязным и ненадежным. Есть ли лучший / более чистый способ достичь этого?

Чтобы использовать свой собственный ответ, вы можете добавить настраиваемый сервер авторизации следующим образом:

 <?php namespace App; use League\OAuth2\Server\AuthorizationServer; use League\OAuth2\Server\ResponseTypes\ResponseTypeInterface; class TokenServer extends AuthorizationServer { /** * Get the token type that grants will return in the HTTP response. * * @return ResponseTypeInterface */ protected function getResponseType() { if ($this->responseType instanceof ResponseTypeInterface === false) { $this->responseType = new UserIdBearerTokenResponse(); } $this->responseType->setPrivateKey($this->privateKey); return $this->responseType; } } 

И пользовательский PassportServiceProvider выглядит так:

 <?php namespace App\Providers; use App\TokenServer; class PassportServiceProvider extends \Laravel\Passport\PassportServiceProvider { /** * Make the authorization service instance. * * @return AuthorizationServer */ public function makeAuthorizationServer() { return new TokenServer( $this->app->make(\Laravel\Passport\Bridge\ClientRepository::class), $this->app->make(\Laravel\Passport\Bridge\AccessTokenRepository::class), $this->app->make(\Laravel\Passport\Bridge\ScopeRepository::class), 'file://'.storage_path('oauth-private.key'), 'file://'.storage_path('oauth-public.key') ); } } 

А затем внесите следующие изменения в файл config / app.php:

 /* * Package Service Providers... * We extend the packaged PassportServiceProvider with our own customization */ // Laravel\Passport\PassportServiceProvider::class, App\Providers\PassportServiceProvider::class,