Reputation: 750
I have a standard Laravel Passport setup on 5.4 - it all works fine and is generating tokens.
I protect my API routes using the auth:api middleware as well as a custom middleware that checks that specific headers in a request are present and valid before any requests are handled. This middleware works fine for the API routes group.
Is there a way to wrap the Passport routes generated by laravel '.../oauth/token' in this middleware as well?
Currently I have set up the routes in my AuthServiceProvider.php boot() method:
public function boot()
{
$this->registerPolicies();
// Passport/OAuth
Passport::routes(function ($router) {
$router->forAccessTokens();
$router->forTransientTokens();
});
Passport::tokensExpireIn(Carbon::now()->addDays(7));
Passport::refreshTokensExpireIn(Carbon::now()->addDays(30));
}
The end goal is that the oauth endpoints will return an error if the headers are not present.
Upvotes: 11
Views: 14560
Reputation: 373
You can try this:
Go to app/Providers/AuthServiceProvider
and look for the function boot()
. In this function you will see a line for registering routes for Passport. The default code is Passport::routes()
. This routes()
method accepts an options array as second argument. You can use it to set middlewares for Passport routes.
Passport::routes(null, ['middleware' => 'api']);
Upvotes: 20
Reputation: 2443
If you only need to add middleware to one Passport route for example /oauth/token
, you can do it this way:
php artisan r:l
AccessTokenController@issueToken
namespace App\Http\Controllers; use Illuminate\Http\Request; use Laravel\Passport\Http\Controllers\AccessTokenController; class ApiTokenController extends AccessTokenController { }
Route::middleware('MyMiddleware')->post('/api-token', 'ApiTokenController@issueToken');
Upvotes: 6
Reputation: 3657
In the app/Providers/AuthServiceProvider
include the Route facade by adding this use statement somewhere in the top:
use Illuminate\Support\Facades\Route;
Then on the boot()
method, put the Passport::routes() inside a Route::group() like this:
Route::group(['middleware'=>'MyFunkyCustomMiddleware'], function(){
Passport::routes(); // <-- Replace this with your own version
});
Hope that helps!
Upvotes: 7