I am trying to override the issueToken
method located in the \Laravel\Passport\Http\Controllers\AccessTokenController
without adding a new route i.e(api/oauth/token). I have built my own AccessTokenController
that performs the functionality that i want but when i make a call to oauth/token
, the parent method is being executed and not my implementation.. am i misisng something to complete the override?
<?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];
}
}
}
Just overriding the route in app/Providers/AuthServiceProvider.php
is enough.
Make sure you add: use Illuminate\Support\Facades\Route;
at the top of the file!
public function boot()
{
$this->registerPolicies();
Passport::routes();
Route::post('/oauth/token', [
'uses' => '\App\Http\Controllers\AccessTokenController@issueToken',
'as' => 'passport.token',
'middleware' => 'throttle',
]);
}
Output of 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 | +--------+----------+-------------------------+-------------------------+---------------------------------------------------------------------------+------------+