bearerToken(); if (!$tokenPlano) { return ApiResponse::UNAUTHORIZED->response([ 'message' => 'Token de arco no proporcionado' ]); } // Buscar arco por token plano $arco = Arco::buscarPorToken($tokenPlano); if (!$arco) { return ApiResponse::UNAUTHORIZED->response([ 'message' => 'Token de arco inválido' ]); } if (!$arco->activo) { return ApiResponse::FORBIDDEN->response([ 'message' => 'Arco desactivado' ]); } // Validación de IP deshabilitada para desarrollo // PROBLEMA: En Docker, $request->ip() retorna la IP del gateway (172.x.x.x), no la IP real del cliente // SOLUCIÓN PRODUCCIÓN: Usar un proxy inverso externo (nginx/traefik) que pase X-Forwarded-For correctamente // Para desarrollo, la validación de token es suficiente /* $requestIp = $request->ip(); if ($arco->ip_address !== $requestIp) { return ApiResponse::FORBIDDEN->response([ 'message' => 'Token no autorizado para esta IP', 'detail' => [ 'ip_registrada_arco' => $arco->ip_address, 'ip_del_request' => $requestIp, 'arco_nombre' => $arco->nombre ] ]); } */ // Agregar el arco al request para uso posterior $request->merge(['arco_autenticado' => $arco]); return $next($request); } }