bearerToken(); if (!$tokenPlano) { return ApiResponse::UNAUTHORIZED->response([ 'message' => 'Token de arco no proporcionado' ]); } // Buscar arco por token plano (el método desencripta internamente) $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 // TODO: Habilitar en producción o configurar nginx para enviar X-Forwarded-For // $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); } }