Как переопределить метод IssueToken в Laravel / Passport - PullRequest
0 голосов
/ 08 марта 2019

Я пытаюсь переопределить метод issueToken, расположенный в \Laravel\Passport\Http\Controllers\AccessTokenController, без добавления нового маршрута, т.е. (api / oauth / token).Я создал свой собственный AccessTokenController, который выполняет ту функциональность, которую я хочу, но когда я выполняю вызов oauth/token, выполняется родительский метод, а не моя реализация.

<?php
   namespace App\Http\Controllers;

   use phpseclib\Crypt\RSA;
   use Illuminate\Database\Eloquent\ModelNotFoundException;
   use League\OAuth2\Server\Exception\OAuthServerException;
   use Psr\Http\Message\ServerRequestInterface;
   use \Laravel\Passport\Http\Controllers\AccessTokenController as ATC;

   class AccessTokenController extends ATC {

     public function issueToken(ServerRequestInterface $request){
       try {
         // Fetching username from request
         $username = $request->getParseBody()['username'];
         // Fetching the User
         $user = User::where('email', '=', $username);
         // Genereting token
         $tokenResponse = parent::issueToken($request);
         //convert response to json string
         $content = $tokenResponse->getBody()->__toString();
         $content['email'] = $user['emial'];
         //convert json to array
         $data = json_decode($content, true);
         return $data;

       } catch (OAuthServerException $e) {
         return ['Message' => 'The suer credentials were incorrect!'];
       }catch (\Exception $e) {
         return ['Message' => 'Exception: '.$e];
       }
     }
   }

Ответы [ 2 ]

1 голос
/ 08 марта 2019

Достаточно просто переопределить маршрут в app/Providers/AuthServiceProvider.php.

Убедитесь, что вы добавили: use Illuminate\Support\Facades\Route; вверху файла!

public function boot()
{
    $this->registerPolicies();

    Passport::routes();

    Route::post('/oauth/token', [
        'uses' => '\App\Http\Controllers\AccessTokenController@issueToken',
        'as' => 'passport.token',
        'middleware' => 'throttle',
    ]);
}

Выход php artisan route:list --name=passport.token:

+--------+----------+-------------------------+-------------------------+---------------------------------------------------------------------------+------------+
| Domain | Method   | URI                     | Name                    | Action                                                                    | Middleware |
+--------+----------+-------------------------+-------------------------+---------------------------------------------------------------------------+------------+
|        | POST     | oauth/token             | passport.token          | App\Http\Controllers\AccessTokenController@issueToken                     | throttle   |
|        | POST     | oauth/token/refresh     | passport.token.refresh  | Laravel\Passport\Http\Controllers\TransientTokenController@refresh        | web,auth   |
|        | GET|HEAD | oauth/tokens            | passport.tokens.index   | Laravel\Passport\Http\Controllers\AuthorizedAccessTokenController@forUser | web,auth   |
|        | DELETE   | oauth/tokens/{token_id} | passport.tokens.destroy | Laravel\Passport\Http\Controllers\AuthorizedAccessTokenController@destroy | web,auth   |
+--------+----------+-------------------------+-------------------------+---------------------------------------------------------------------------+------------+

0 голосов
/ 08 марта 2019

Маршрут жестко закодирован в коде внутри поставщика.

Я предлагаю переопределить маршрут в приложении, измените этот код на промежуточное ПО, а затем оберните маршрут вокруг него.

...