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」で認証後のユーザに限定して提供することができます。
コメントする