Edited at

laravel/passportのrouteのprefixをデフォルトのoauth/から任意のルートに変更する【Laravel5.5】

More than 1 year has passed since last update.


概要

LaravelでAPI認証する際に利用するライブラリ、laravel/passportのrouteをデフォルトの oauth/ から変更する方法。

※当記事ではlaravel/passportの導入方法は触れてれていないので、基本的な使い方、導入方法はこちらの記事を参照

Laravel5.5でAPI認証のパッケージ(Laravel Passport)を利用する - Qiita

https://qiita.com/niiyz/items/fffff94acb6061ecc9d4


前提

通常、laravel/passportをinstallして各種設定をしたら、以下のようなrouteが生成される。

# php artisan route:list

| | POST | oauth/authorize | | Laravel\Passport\Http\Controllers\ApproveAuthorizationController@approve | Barryvdh\Cors\HandleCors::class,web,auth |
| | GET|HEAD | oauth/authorize | | Laravel\Passport\Http\Controllers\AuthorizationController@authorize | Barryvdh\Cors\HandleCors::class,web,auth |
| | DELETE | oauth/authorize | | Laravel\Passport\Http\Controllers\DenyAuthorizationController@deny | Barryvdh\Cors\HandleCors::class,web,auth |
| | POST | oauth/clients | | Laravel\Passport\Http\Controllers\ClientController@store | Barryvdh\Cors\HandleCors::class,web,auth |
| | GET|HEAD | oauth/clients | | Laravel\Passport\Http\Controllers\ClientController@forUser | Barryvdh\Cors\HandleCors::class,web,auth |
| | DELETE | oauth/clients/{client_id} | | Laravel\Passport\Http\Controllers\ClientController@destroy | Barryvdh\Cors\HandleCors::class,web,auth |
| | PUT | oauth/clients/{client_id} | | Laravel\Passport\Http\Controllers\ClientController@update | Barryvdh\Cors\HandleCors::class,web,auth |
| | GET|HEAD | oauth/personal-access-tokens | | Laravel\Passport\Http\Controllers\PersonalAccessTokenController@forUser | Barryvdh\Cors\HandleCors::class,web,auth |
| | POST | oauth/personal-access-tokens | | Laravel\Passport\Http\Controllers\PersonalAccessTokenController@store | Barryvdh\Cors\HandleCors::class,web,auth |
| | DELETE | oauth/personal-access-tokens/{token_id} | | Laravel\Passport\Http\Controllers\PersonalAccessTokenController@destroy | Barryvdh\Cors\HandleCors::class,web,auth |
| | GET|HEAD | oauth/scopes | | Laravel\Passport\Http\Controllers\ScopeController@all | Barryvdh\Cors\HandleCors::class,web,auth |
| | POST | oauth/token | | Laravel\Passport\Http\Controllers\AccessTokenController@issueToken | Barryvdh\Cors\HandleCors::class,throttle |
| | POST | oauth/token/refresh | | Laravel\Passport\Http\Controllers\TransientTokenController@refresh | Barryvdh\Cors\HandleCors::class,web,auth |
| | GET|HEAD | oauth/tokens | | Laravel\Passport\Http\Controllers\AuthorizedAccessTokenController@forUser | Barryvdh\Cors\HandleCors::class,web,auth |
| | DELETE | oauth/tokens/{token_id} | | Laravel\Passport\Http\Controllers\AuthorizedAccessTokenController@destroy | Barryvdh\Cors\HandleCors::class,web,auth |

oauth/ というrouteがいくつか生成されている。

laravelでは通常、apiは api/ というrouteになるため、こちらのrouteに関してもapi/ にしたい。


手順

app_name/app/Providers/AuthServiceProvider.phpboot() を変更する。

デフォルトは以下のようになっている。

<?php

namespace App\Providers;

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

class AuthServiceProvider extends ServiceProvider
{
/**
* The policy mappings for the application.
*
* @var array
*/

protected $policies = [
'App\Model' => 'App\Policies\ModelPolicy',
];

/**
* Register any authentication / authorization services.
*
* @return void
*/

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

Passport::routes();
}
}

このファイルの

    public function boot()

{
$this->registerPolicies();

Passport::routes();
}

    public function boot()

{
$this->registerPolicies();
$callback = null;
$options = [
'prefix' => 'api/oauth',
'namespace' => '\Laravel\Passport\Http\Controllers',
];
Passport::routes($callback, $options);
}

にする。

これで、routeのprefixが oauth/ から api/oauth に変更された。

php artisan route:list で確認するとこんな感じ。

# php artisan route:list

| | POST | api/oauth/authorize | | Laravel\Passport\Http\Controllers\ApproveAuthorizationController@approve | Barryvdh\Cors\HandleCors::class,web,auth |
| | GET|HEAD | api/oauth/authorize | | Laravel\Passport\Http\Controllers\AuthorizationController@authorize | Barryvdh\Cors\HandleCors::class,web,auth |
| | DELETE | api/oauth/authorize | | Laravel\Passport\Http\Controllers\DenyAuthorizationController@deny | Barryvdh\Cors\HandleCors::class,web,auth |
| | GET|HEAD | api/oauth/clients | | Laravel\Passport\Http\Controllers\ClientController@forUser | Barryvdh\Cors\HandleCors::class,web,auth |
| | POST | api/oauth/clients | | Laravel\Passport\Http\Controllers\ClientController@store | Barryvdh\Cors\HandleCors::class,web,auth |
| | DELETE | api/oauth/clients/{client_id} | | Laravel\Passport\Http\Controllers\ClientController@destroy | Barryvdh\Cors\HandleCors::class,web,auth |
| | PUT | api/oauth/clients/{client_id} | | Laravel\Passport\Http\Controllers\ClientController@update | Barryvdh\Cors\HandleCors::class,web,auth |
| | GET|HEAD | api/oauth/personal-access-tokens | | Laravel\Passport\Http\Controllers\PersonalAccessTokenController@forUser | Barryvdh\Cors\HandleCors::class,web,auth |
| | POST | api/oauth/personal-access-tokens | | Laravel\Passport\Http\Controllers\PersonalAccessTokenController@store | Barryvdh\Cors\HandleCors::class,web,auth |
| | DELETE | api/oauth/personal-access-tokens/{token_id} | | Laravel\Passport\Http\Controllers\PersonalAccessTokenController@destroy | Barryvdh\Cors\HandleCors::class,web,auth |
| | GET|HEAD | api/oauth/scopes | | Laravel\Passport\Http\Controllers\ScopeController@all | Barryvdh\Cors\HandleCors::class,web,auth |
| | POST | api/oauth/token | | Laravel\Passport\Http\Controllers\AccessTokenController@issueToken | Barryvdh\Cors\HandleCors::class,throttle |
| | POST | api/oauth/token/refresh | | Laravel\Passport\Http\Controllers\TransientTokenController@refresh | Barryvdh\Cors\HandleCors::class,web,auth |
| | GET|HEAD | api/oauth/tokens | | Laravel\Passport\Http\Controllers\AuthorizedAccessTokenController@forUser | Barryvdh\Cors\HandleCors::class,web,auth |
| | DELETE | api/oauth/tokens/{token_id} | | Laravel\Passport\Http\Controllers\AuthorizedAccessTokenController@destroy | Barryvdh\Cors\HandleCors::class,web,auth |