Laravelサイト内で認証済みユーザのみにAPIを提供する方法です。
以前に、Laravelサイト内外問わず、APIで認証機能を提供するしくみとしてPassportを紹介しました。
LaravelでPassportパッケージ(OAuth2)を使用したAPI認証を構築
今回は、PassportではなくSessionを用いて、Laravelサイト内に限定し、かつ、認証済みのユーザのみにAPIを提供する方法を紹介します。
SPAではないが、パフォーマンス的に部分的にAPIで情報を提供する際に有効です。
- PHP 7.3.33
- Laravel 6.20.44
APIでセッション認証の有効化
まず「config/auth.php」を開き、apiのドライバをwebと同じ「session」にします。
'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'session', 'provider' => 'users', ], ],
次に「app/Http/Kernel.php」を開き、webのミドルウェアに合わせて、apiにミドルウェアを追加します。
protected $middlewareGroups = [ ... 'api' => [ \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, ... ], ];
バージョンによっては若干内容が異なるかもしれませんが、今回は上記の4つのクラスを追記しました。
設定は以上です。
実装、動作確認
例えば、任意のAPIへのアクセスを認証済みユーザに限定したい場合、「routes/api.php」のmiddlewareに「auth」を指定します。
Route::get('sample', 'SampleController@index')->middleware('auth');
これで、API「https://dummy.helog.jp/api/sample」は、「https://dummy.helog.jp」で認証後のユーザに限定して提供することができます。
コメントする