0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[解決済み]insomniaでAPIエンドポイントがうまくいかない!(Laravel Sanctum)

Last updated at Posted at 2024-07-15

解決しました

環境
Laravel 11
Insomnia 9.3.2

目的

Laravel Sanctumを使ってinsomniaでAPIを取得する。

問題

404
SCR-20240715-onjr.png

コード

api.php
<?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']);
UserController.php
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が読み込まれていなかったのが主な原因だった。

AppServiceProvider.php
Route::prefix('api')
    ->middleware('api')
    ->group(base_path('routes/api.php'));

上記をAppServiceProvider.phpに記述しapi.phpを読み込み、

AppServiceProvider.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出力コード書けばいいのかわからないんだけども…。

ひとまず一件落着。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?