LaravelのSanctumでログインページにアクセスできない

2023.06.20 14:42
2023.06.20 14:42
LaravelのSanctumでログインページにアクセスできない

laravelのsanctumをつかってSPA認証のAPIサーバーをつくったんですが、
その時にデータが取得できずにハマってしまったことがあり、どう解決したかをメモしてみます。

SPA認証を使ってログイン後、取得したXSRF-Tokenで認証領域にアクセスできない現象に見舞われました。ログインまではできるんですが、ログイン後にログインが必要なページにアクセスできないということです。ログインがいらないページは問題なく取得できました。

動作環境はPHPは8.1、Laravelは9です。

結論としては2つの原因で動かなくなっていました。

原因1:ルーティングの登録漏れ

まずひとつは、route.phpの登録漏れです。
packageでディレクトリを分けた構成にしていたため、独自にroutesをつくってそれを読ませるようにしてたのですが、それをRouteServiceProvider.phpに登録しなくてはならなかったようです。
以下のapi.phpが独自に追加したルーティングファイルです。

packages/Tool/Admin/routes/api.php

これを「app/Providers/RouteServiceProvider.php」に登録をします。

Route::middleware('api')
    ->prefix('api/admin')
    ->group(base_path('packages/Tool/Admin/routes/api.php'));
});

ここはこれで完了です。

原因2:ルーティングの書き方

次にルーティングの書き方。
「api/admin」を独自で加えていたのがまずかったようですので直します。

Route::group(['namespace' => $namespace,'middleware' => ['auth:sanctum']], function () {
    Route::resource('api/admin/hoge', 'HogeController');
});

↓直します

Route::middleware('auth:sanctum')->namespace($namespace)->group(function(){
    Route::resource('/hoge', 'HogeController', ['as' => 'admin']);
}

これで正常に動くようになりました!
今回は以上です!