From beb2f7bdf09f7dd9a06679ef66c8ecbd40871069 Mon Sep 17 00:00:00 2001 From: Kevin_Ramirez Date: Tue, 21 Jul 2026 16:29:15 -0500 Subject: [PATCH] =?UTF-8?q?fix(auth):=20corregir=20orden=20de=20middleware?= =?UTF-8?q?s=20=E2=80=94=20Tenant=20debe=20correr=20antes=20que=20License?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug preexistente: LicenseValidationMiddleware se registraba después de TenantMiddleware, pero add_middleware() de Starlette invierte el orden de ejecución (el último registrado corre primero) — así que License corría ANTES que Tenant en la práctica, contradiciendo el comentario en middleware.py que asumía lo contrario ("TenantMiddleware corre antes... dejó tenant en user_info"). Efecto real: request.state.user_info nunca existía cuando License intentaba usarlo como fallback para tenant_override → el caché de licencia (agregado en a1bbb6b1) nunca podía activarse para requests sin X-Tenant-Override header/cookie explícito. Confirmado en vivo contra el Hub real (workspace.aduanasoft.com): verify-license se repetía en cada request pese al caché. Con el orden corregido, la segunda llamada dentro del TTL ya no golpea al Hub. --- backend/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/main.py b/backend/main.py index f4a7990e..39676db3 100644 --- a/backend/main.py +++ b/backend/main.py @@ -63,8 +63,8 @@ async def on_startup(): if settings.DEBUG: app.add_middleware(RequestLoggingMiddleware) -app.add_middleware(TenantMiddleware) app.add_middleware(LicenseValidationMiddleware) +app.add_middleware(TenantMiddleware) # CORS debe ser el último en añadirse para que sea el más externo # y cubra todas las respuestas, incluyendo las de los middlewares internos