Laravel 11
Insomnia 9.3.2
目的
Laravel Sanctumを使ってinsomniaでAPIを取得する。
問題
コード
<?php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\UserController;
Route::get('/user', function (Request $request) {
return $request->user();
})->middleware('auth:sanctum');
Route::post('/login', [UserController::class, 'loginApi']);
public function loginApi(Request $request) {
$incomingFields = $request->validate([
'username' => 'required',
'password' => 'required'
]);
if (auth()->attempt($incomingFields)) {
$user = User::where('username', $incomingFields['username'])->first();
$token = $user->createToken('ourapptoken')->plainTextToken;
return $token;
}
return 'sorry';
}
試み
- ルーティングの確認
- キャッシュ削除、再起動
- 誤字脱字確認
-
php artisan route:list
POST login ... UserController@login
- わざとusernameもしくはpasswordを間違える(変わらず404)
-
localhost:8000
ではなく127.0.0.1:8000
も試す(変わらず404) - 教材データと比較
-
/login
の競合を避けるため/auth/login
へ(変わらず404) - log確認(何も出ていない)
多分…
そもそも404なのでルーティングがうまく行っていないのではないかと思っているのだが、正しくルーティングできているはずだよな…?でも結果として404が出ているわけで…。
バージョンの違いで他にもファイルを構わなきゃならない可能性も大いにあるが、リリースノートを見ながら設定してもよくわからん!!!!
GPT、Perplexityに聞くも堂々巡り。
insomniaでなにか設定しなくちゃならない項目があるのかな?
GETからPOSTに変えたし、bodyの項目はJSONで書いている。構文ミスもない。
これまでで一番わからない。オワタ
ブログ
Xはじめました
IDがしっくりきていないので変わる可能性大
解決(2024/07/16)
api.php
が読み込まれていなかったのが主な原因だった。
Route::prefix('api')
->middleware('api')
->group(base_path('routes/api.php'));
上記をAppServiceProvider.php
に記述しapi.phpを読み込み、
RateLimiter::for('api', function (Request $request) {
return Limit::perMinute(60)->by(optional($request->user())->id ?: $request->ip());
});
同じくAppServiceProvider.php
にレートリミッターを設定して正しく動いた。
これらふたつのコードはGPTに考えてもらったものだが、api.php
が読み込まれていないのは自分で突き止めた!
これをどちらもコメントアウトしても404が変わらず、それどころかapi.php
に適当な文字を書いてもLogにすらエラーが出なかったことで特定できた。
これでわからなければ適当なところにLog出力して特定してみようと思っていたが、今回は運が良かった。
まあどこにLog出力コード書けばいいのかわからないんだけども…。
ひとまず一件落着。