
Auth0をPHP (Laravel)で使ってみる
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
Auth0のPHP (Laravel)チュートリアルをやってみましたので、その内容を書いていきます。
前提
- Auth0のサインアップが完了していること
Auth0アプリケーションの作成
今回はAuth0のサインアップ後にデフォルトで作成されているアプリケーションを使うことにします。

サンプルアプリケーションの作成
Laravelプロジェクトを作成します。
laravel new auth0-sample
あとで.envファイルが必要になりますが、既に作成されておりますので新規作成は不要です。
Auth0 pluginとSDKのインストール
作成したプロジェクトのディレクトリへ移動します。
cd auth0-sample
下記を実行します。
composer require auth0/login:"~5.0"
完了すると、下記のライブラリが追加されます。
- Auth0 PHP SDK
- vendor\auth0\auth0-php
- Auth0 Laravel plugin
- vendor\auth0\login
Auth0を使うための準備
Auth0サービスをLaravelのサービスプロバイダーに登録
config/app.phpに下記を追加します。
'providers' => [
・・(略)・・
/**
* Auth0
*/
Auth0\Login\LoginServiceProvider::class,
Auth0\Login\LoginServiceProviderのregister()メソッドを確認すると、
Auth0サービスがLaravelのサービスコンテナへ登録されるようになっております。
また、Laravelのログアウトイベントをイベントリスナーに登録し、Auth0のログアウト処理が呼び出されるようになっております。
・・(略)・・
public function register()
{
// Bind the auth0 name to a singleton instance of the Auth0 Service
$this->app->singleton('auth0', function () {
return new Auth0Service();
});
// When Laravel logs out, logout the auth0 SDK trough the service
\Event::listen('auth.logout', function () {
\App::make('auth0')->logout();
});
\Event::listen('user.logout', function () {
\App::make('auth0')->logout();
});
\Event::listen('Illuminate\Auth\Events\Logout', function () {
\App::make('auth0')->logout();
});
}
・・(略)・・
Auth0ファサードの登録
必須では無いですが、ファサードを使う場合に備えて、config/app.phpに下記を追加しておきます。
'aliases' => [
・・(略)・・
/**
* Auth0
*/
'Auth0' => Auth0\Login\Facade\Auth0::class,
Auth0UserRepositoryの登録
認証済みユーザーを格納するためのクラスを登録します。
app/Providers/AppServiceProvider.phpのregister()メソッドに下記を追加します。
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
// Auth0
$this->app->bind(
\Auth0\Login\Contract\Auth0UserRepository::class,
\Auth0\Login\Repository\Auth0UserRepository::class
);
}
config/laravel-auth0.phpの作成と設定
下記を実行します。
$ php artisan vendor:publish
下記のようなメッセージが表示され、入力を求められます。
Which provider or tag's files would you like to publish?: [0 ] Publish files from all providers and tags listed below [1 ] Provider: Auth0\Login\LoginServiceProvider [2 ] Provider: BeyondCode\DumpServer\DumpServerServiceProvider [3 ] Provider: Fideloper\Proxy\TrustedProxyServiceProvider [4 ] Provider: Illuminate\Foundation\Providers\FoundationServiceProvider [5 ] Provider: Illuminate\Mail\MailServiceProvider [6 ] Provider: Illuminate\Notifications\NotificationServiceProvider [7 ] Provider: Illuminate\Pagination\PaginationServiceProvider [8 ] Provider: Laravel\Tinker\TinkerServiceProvider [9 ] Tag: config [10] Tag: laravel-errors [11] Tag: laravel-mail [12] Tag: laravel-notifications [13] Tag: laravel-pagination >
Auth0\Login\LoginServiceProviderを選択するので、1を入力してEnter。
> 1
Publishing complete.と表示されればOKです。
Copied File [/vendor/auth0/login/src/config/config.php] To [/config/laravel-auth0.php] Publishing complete.
config/laravel-auth0.phpが作成されていることを確認します。
.envファイルの設定
.envファイルに下記を追加して値を設定します。
// Auth0 AUTH0_DOMAIN=YOUR_DOMAIN AUTH0_CLIENT_ID=YOUR_CLIENT_ID AUTH0_CLIENT_SECRET=YOUR_CLIENT_SECRET
値はAuth0管理画面のApplications > Settingsで確認できます。

Auth0サーバーからコールバックを受けるためのルーティング設定
Auth0サーバーからコールバックを受けるためのルーティング設定を行います。
routes/web.phpに下記を追加します。
// Auth0 Route::get( '/auth0/callback', '\Auth0\Login\Auth0Controller@callback' )->name( 'auth0-callback' );
ログイン、ログアウト処理を行うためのコントローラー作成
下記を実行し、コントローラーファイルを作成します。
php artisan make:controller Auth/Auth0IndexController
作成されたapp/Http/Controllers/Auth/Auth0IndexController.phpを下記ののようにします。
class Auth0IndexController extends Controller
{
/**
* Redirect to the Auth0 hosted login page
*
* @return mixed
*/
public function login()
{
$authorize_params = [
'scope' => 'openid email email_verified',
// Use the key below to get an Access Token for your API.
// 'audience' => config('laravel-auth0.api_identifier'),
];
return \App::make('auth0')->login(null, null, $authorize_params);
}
/**
* Log out of Auth0
*
* @return mixed
*/
public function logout()
{
\Auth::logout();
$logoutUrl = sprintf(
'https://%s/v2/logout?client_id=%s&returnTo=%s',
env('AUTH0_DOMAIN'),
env('AUTH0_CLIENT_ID'),
env('APP_URL'));
return \Redirect::intended($logoutUrl);
}
}
login()メソッドとlogout()メソッドのためのルーティング設定を行うため、routes/web.phpに下記を追加します。
Route::get('/login', 'Auth\Auth0IndexController@login' )->name( 'login' );
Route::get('/logout', 'Auth\Auth0IndexController@logout' )->name( 'logout' )->middleware('auth');
Laravelの認証機能との統合
config/auth.phpのprovidersを下記のようにします。
'providers' => [
//'users' => [
// 'driver' => 'eloquent',
// 'model' => App\User::class,
//],
'users' => [
'driver' => 'auth0'
],
// 'users' => [
// 'driver' => 'database',
// 'table' => 'users',
// ],
],
サンプル画面にログイン、ログアウトのリンクを設定
resources/views/welcome.blade.phpの@if (Route::has('login'))部分を下記のようにします。
<body>
<div class="flex-center position-ref full-height">
@if (Route::has('login'))
<div class="top-right links">
@auth
<a href="{{ route('logout') }}">Logout</a>
@else
<a href="{{ route('login') }}">Login/Signup</a>
@endauth
</div>
@endif
Auth0のアプリケーション設定
管理画面のアプリケーション設定を行います。

今回のサンプルアプリケーションの場合は、下記のようになります。
- Allowed Callback URLs
- https://{ドメイン}/auth0/callback
- Application Login URI
- https://{ドメイン}/login
- Allowed Logout URLs
- https://{ドメイン}/
Logout URLの設定値について
この値はログアウト処理のエンドポイントのreturnToパラメーターに付与される値になります。
app/Http/Controllers/Auth/Auth0IndexController.phpのlogout()メソッドで指定する値が下記のようになっておりますので、env('APP_URL')が渡されます。
その為、Allowed Logout URLsの値をhttps://{ドメイン}/にしております。
public function logout()
{
\Auth::logout();
$logoutUrl = sprintf(
'https://%s/v2/logout?client_id=%s&returnTo=%s',
env('AUTH0_DOMAIN'),
env('AUTH0_CLIENT_ID'),
env('APP_URL'));
return \Redirect::intended($logoutUrl);
}
サンプルアプリケーションのデプロイ
サンプルアプリケーションは、サーバーなどにデプロイしてください。
試してみる
未ログイン状態
画面右上の表示がLOGIN/SIGNUPになってます。

ログイン処理を行う
画面右上のLOGIN/SIGNUPをクリックします。
すると、Auth0で提供されるログイン画面が表示されました。

サインアップする
まだログインできるユーザーがいないので、サインアップしてみます。

サインアップ完了&ログイン状態
画面右上の表示がLOGOUTになってます。

ログアウト処理
画面右上のLOGOUTをクリックすると、ログアウト処理が行われて、returnToパラメーターに指定されるhttps://{ドメイン}/に戻ってきます。

LaravelのAuthファサードで認証確認と認証済みユーザーの取得
Authファサードを下記のように使用することで、認証確認と認証済みユーザーの取得ができます。
Auth::check()- 認証済みかどうかの確認
Auth::user()- 認証済みユーザーの情報
確認準備
今回はそれぞれの処理結果を出力するだけのコントローラーを作成します。
php artisan make:controller Auth0TestController
app/Http/Controllers/Auth0TestController.phpを下記のようにします。
class Auth0TestController extends Controller
{
public function authCheck()
{
echo \Auth::check();
}
public function authUser()
{
echo \Auth::user();
}
}
routes/web.phpに下記を追加します。
Route::get('/auth-check', 'Auth0TestController@authCheck' );
Route::get('/auth-user', 'Auth0TestController@authUser' );
Auth::check()の確認
認証済みだとtrue(1)が返ってきます。

Auth::user()の確認
こんなふうに情報を取得できます。

UserInfoの取得
このようにすることで取得できます。
public function getUser()
{
$userinfo = \App::make('auth0')->getUser();
echo json_encode($userinfo);
}

おわりに
今回はAuth0をPHP(Laravel)で使用する場合のチュートリアルを通して、Auth0とLaravelの認証機能を統合できることが確認できました。







