😺

Laravelのapiに認証時にRoute [login] not defined.エラー

2021/11/27に公開

概要

Laravel を使って jwt を使った認証 api を実装して、GET リクエストを送ったら以下のようになりました。
解決に少し詰まったので、解決策をまとめます。

リクエスト(例)

curl --location --request GET 'http://localhost:3000/api/user' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOjEsImlhdCI6MTYzNzYyNjY1NiwiZXhwIjoxNjM3NjI2NjU2fQ==.ODQ5ZDE5ZmFmMzFmOGI1NzIxNWMxYWRlZjJmNjQ0NjI0NGMyZDZjMjQ4NzQ0NWZlZWZkNmJlMDdiMWJiMGY0Mw=='

レスポンス。

Symfony\Component\Routing\Exception\RouteNotFoundException: Route [login] not defined. in file /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/UrlGenerator.php on line 444

解決方法

header に'Accept: application/json'が必要でした。

Laravel 側は API クライアントであることを理解できずに、Web ページの/login にリダイレクトしようとしますが、存在しないためエラーが発生するみたいです。

curl --location --request GET 'http://localhost:3000/api/user' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOjEsImlhdCI6MTYzNzYyNjY1NiwiZXhwIjoxNjM3NjI2NjU2fQ==.ODQ5ZDE5ZmFmMzFmOGI1NzIxNWMxYWRlZjJmNjQ0NjI0NGMyZDZjMjQ4NzQ0NWZlZWZkNmJlMDdiMWJiMGY0Mw=='

解決策

https://stackoverflow.com/questions/49294253/laravel-passport-route-login-not-defined

Discussion