Laravel8 + Vue-cli でSPAを作成するにあたって、セッション認証の箇所でハマりました。 仕様上データベースは別サーバーなので、sanctumは使わずRedisを用いてsession認証を行います。 その際ページリロードでセッションが継続できない事態にハマってしまいました。
注意:ここでははまった箇所のメモ書き程度なので、本格的な SPAの作成手順はわかっているものとして記述しています。
状況
1、以下の処理を作成 ・ログインするとアクセストークンを作成、セッションとRedisに保存する。 ・その後リクエストが来ると、セッションから登録したキーを取得、Redisの内容と一致するかチェック ・OkならActionへ、NGなら認証エラーを返却
2、app/Http/Kernel.phpにapiでもセッションが利用できるように登録
// \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, 'throttle:api', \Illuminate\Routing\Middleware\SubstituteBindings::class, \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class,
3、ログインしてmiddlewareが適用されている適当なapiを作成して叩く 4、ページを更新して再度適当なapiを叩く ・・・ここでDebugで出しているセッションが出ずにnullになっていました。
結論、app/Http/Kanel.phpに記述するapiの箇所にて throttle:api よりも上に記述する必要があった。
\App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, 'throttle:api', \Illuminate\Routing\Middleware\SubstituteBindings::class,
取り急ぎ覚え書き。