WEB/システム/IT技術ブログ

Laravelサイト内で認証済みユーザのみにAPIを提供する方法

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

B!

Comment

コメントはありません

コメントする

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

Monthly Archives