Lee Pownall

Prefix Laravel Passport Routes

Out of the box Passport urls are under oauth/*. How can you alter these?

To add Passport routes you need to add Passport::routes() to the boot method of AuthServiceProvider.

<?php

namespace App\Providers;

use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use Laravel\Passport\Passport;

class AuthServiceProvider extends ServiceProvider
{
    public function boot()
    {
        Passport::routes();
    }
}

If you then run php artisan route:list --compact you'll see the routes.

+----------+-----------------+---------------------------------------------------------------------------+
| Method   | URI             | Action                                                                    |
+----------+-----------------+---------------------------------------------------------------------------+
| GET|HEAD | oauth/authorize | Laravel\Passport\Http\Controllers\AuthorizationController@authorize       |
| POST     | oauth/authorize | Laravel\Passport\Http\Controllers\ApproveAuthorizationController@approve  |
| DELETE   | oauth/authorize | Laravel\Passport\Http\Controllers\DenyAuthorizationController@deny        |
| POST     | oauth/clients   | Laravel\Passport\Http\Controllers\ClientController@store                  |
| GET|HEAD | oauth/clients   | Laravel\Passport\Http\Controllers\ClientController@forUser                |

To prefix these with api you can do the following:

Passport::routes(null, [
    'prefix' => 'api/oauth',
]);

Out of the box Passport urls are under oauth/*. How can you alter these?

To add Passport routes you need to add Passport::routes() to the boot method of AuthServiceProvider.

<?php

namespace App\Providers;

use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use Laravel\Passport\Passport;

class AuthServiceProvider extends ServiceProvider
{
    public function boot()
    {
        Passport::routes();
    }
}

If you then run php artisan route:list --compact you'll see the routes.

+----------+-----------------+---------------------------------------------------------------------------+
| Method   | URI             | Action                                                                    |
+----------+-----------------+---------------------------------------------------------------------------+
| GET|HEAD | oauth/authorize | Laravel\Passport\Http\Controllers\AuthorizationController@authorize       |
| POST     | oauth/authorize | Laravel\Passport\Http\Controllers\ApproveAuthorizationController@approve  |
| DELETE   | oauth/authorize | Laravel\Passport\Http\Controllers\DenyAuthorizationController@deny        |
| POST     | oauth/clients   | Laravel\Passport\Http\Controllers\ClientController@store                  |
| GET|HEAD | oauth/clients   | Laravel\Passport\Http\Controllers\ClientController@forUser                |

To prefix these with api you can do the following:

Passport::routes(null, [
    'prefix' => 'api/oauth',
]);

Or if you are running PHP 8 you can use named arguments.

Passport::routes(options: [
    'prefix' => 'api/oauth',
]);

If you run php artisan route:list --compact again you will see:

+----------+---------------------+---------------------------------------------------------------------------+
| Method   | URI                 | Action                                                                    |
+----------+---------------------+---------------------------------------------------------------------------+
| GET|HEAD | api/oauth/authorize | Laravel\Passport\Http\Controllers\AuthorizationController@authorize       |
| POST     | api/oauth/authorize | Laravel\Passport\Http\Controllers\ApproveAuthorizationController@approve  |
| DELETE   | api/oauth/authorize | Laravel\Passport\Http\Controllers\DenyAuthorizationController@deny        |
| POST     | api/oauth/clients   | Laravel\Passport\Http\Controllers\ClientController@store                  |
| GET|HEAD | api/oauth/clients   | Laravel\Passport\Http\Controllers\ClientController@forUser                |