前提・実現したいこと
Laravelにて、Sanctumを使用した認証APIを作成しました。
ログインは実装できたものの、動作確認としてmiddlewareで認証保護しているルートにアクセスすると401を返されてしまいます。
調べてみると.env
で設定した環境変数が間違っている可能性が高いと思われましたが、間違っている箇所がわかりません。
エラーメッセージ
http://localhpst:10080/api/user
へPOSTした際のレスポンス
"message": "Unauthenticated."
該当のソースコード
php
1// api.php 2 3// こちらにアクセスできない 4Route::group(['middleware' => ['auth:sanctum']], function () { 5 Route::post('/user', function(Request $request){ 6 return response()->json([ 7 'name' => Auth::user()->name, 8 ]); 9 }); 10}); 11 12// ログインは可能 13Route::post('/login', [LoginController::class, 'login']);
php
1// LoginControllerクラスのloginメソッド 2 3 $credentials = $request->only('login_id', 'password'); 4 5 DB::beginTransaction(); 6 try { 7 $result = UserService::login($credentials); 8 if(!$result){ 9 Log::warning('user.login: auth failure'); 10 return $this->createResponse("failure", CodeConst::AUTH_FAILURE); 11 } 12 DB::commit(); 13 14 } catch (\Exception $e) { 15 Log::error('user.login: error', [$e->getTraceAsString()]); 16 DB::rollback(); 17 return $this->createResponse("failure", CodeConst::SYSTEM_ERROR); 18 } 19 20 $data = [ 21 'user' => Auth::user(), 22 ]; 23 24 // jsonでレスポンスを生成するメソッドへ渡す 25 return $this->createResponse("success", CodeConst::SUCCESS, $data);
php
1// UserServiceクラスのloginメソッド 2 3 /** 4 * ユーザログイン処理 5 * 6 * @param [type] $credentials 7 * @return void 8 */ 9 public function login($credentials) { 10 if (!Auth::attempt($credentials)) { 11 return false; 12 } 13 return true; 14 }
json
1// ログインのリクエスト 2 3{ 4 login_id: "ログインID" 5 password: "パスワード" 6} 7 8// レスポンス 9{ 10 "header": { 11 "status": "success", 12 "code": 0 13 }, 14 "response": { 15 "user": { 16 "id": ユーザーID, 17 "login_id": ログインID, 18 "name": 名前, 19 "last_login_at": null, 20 "deleted_at": null, 21 "created_at": "2021-05-16T02:25:42.000000Z", 22 "updated_at": null 23 } 24 } 25}
試したこと
補足情報にある記事を見つつ、各設定を確認しました。
env
1 2APP_URL=http://localhost 3 4SANCTUM_STATEFUL_DOMAINS=localhost:10080 5SESSION_DOMAIN=localhost
php
1// config/sanctum.php 2 3'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS','localhost,127.0.0.1,127.0.0.1:10080,::1')),
php
1// config/cors.php 2 3'paths' => ['api/*', 'sanctum/csrf-cookie'], 4 5'allowed_methods' => ['*'], 6 7'allowed_origins' => ['*'], 8 9'allowed_origins_patterns' => [], 10 11'allowed_headers' => ['*'], 12 13'exposed_headers' => [], 14 15'max_age' => 0, 16 17'supports_credentials' => true,
補足情報(FW/ツールのバージョンなど)
対処するにあたって参照した記事:
readouble.com
Laravel SanctumでSPA認証ができない(Unauthenticated.)
開発環境はdocker-composeにて構築しています。
ディレクトリ構成
├─ backend(Laravelプロジェクト)
├─ infra
│ ├─ mysql(Dockerfile
、my.conf
)
│ ├─ nginx(default.conf
)
│ └─ php(Dockerfile
、php.ini
)
├─ docker-compose.yml
├─ fugahoge.py
└─ Makefile
- Laravel8
- PHP7
- MacOS
- Docker Desktop
- Postman
あなたの回答
tips
プレビュー