$request->ip(), 'user_id' => optional($request->user())->id, 'method' => $request->method(), 'uri' => $request->getRequestUri(), 'input' => $request->all(), 'headers' => $request->headers->all(), ]); $apiKey = $request->header('X-API-KEY'); $validApiKey = false; // 1. API 키가 유효한지 확인 if ($apiKey) { $validApiKey = DB::table('api_keys') ->where('key', $apiKey) ->where('is_active', true) ->exists(); // 2. 회원 인증 (remember_token으로) if (!$validApiKey) { $user = Member::where('remember_token', $apiKey)->first(); if ($user) { $validApiKey = true; // ✅ 세션에 유저 정보 저장 session(['Adm' => [ 'idx' => $user->mb_num, 'id' => $user->mb_id, 'name' => $user->mb_name, 'level' => $user->mb_level, 'token' => $user->remember_token, ]]); } } } if (!$validApiKey) { return response()->json(['message' => 'Unauthorized. Invalid or missing API key or token'], 401); } // Bearer 인증 (Sanctum) $user = []; if($token = $request->bearerToken()) { $accessToken = PersonalAccessToken::findToken($token); if ($accessToken && $accessToken->tokenable instanceof Member) { $user = $accessToken->tokenable; } } if ($user) { $request->setUserResolver(fn() => $user); } $response = $next($request); // 응답 정보 저장 Log::info('API Response', [ 'uri' => $request->getRequestUri(), 'status' => $response->getStatusCode(), // 'content' => $response->getContent(), // 응답 body도 원하면! ]); return $response; } }