From d9c29bdc685d617265632ea18939f749a9ba3171 Mon Sep 17 00:00:00 2001 From: adevopg Date: Tue, 14 Jul 2026 14:49:12 +0000 Subject: [PATCH] log-out: redirect relativo (arreglar localhost tras el proxy) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Construir la URL desde request.url daba https://localhost:3001/es detrás de Caddy (usa la dirección interna). Ahora el Location es relativo (/es), que el navegador resuelve contra el dominio público real. Co-Authored-By: Claude Opus 4.8 (1M context) --- web-next/app/[locale]/log-out/route.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/web-next/app/[locale]/log-out/route.ts b/web-next/app/[locale]/log-out/route.ts index 2845fe4..e92c812 100644 --- a/web-next/app/[locale]/log-out/route.ts +++ b/web-next/app/[locale]/log-out/route.ts @@ -5,13 +5,18 @@ import { routing } from '@/i18n/routing' /** * Cierra la sesión y redirige al inicio del idioma. Es una ruta visitable * (/es/log-out, /en/log-out): destruye la cookie de sesión y manda a «/{locale}». + * + * Se usa un `Location` RELATIVO (no `request.url`): detrás del proxy inverso + * (Caddy) `request.url` trae la dirección interna (localhost:3001), lo que hacía + * que el redirect apuntara a localhost. Con una ruta relativa el navegador la + * resuelve contra el dominio público real. */ -export async function GET(request: Request, { params }: { params: Promise<{ locale: string }> }) { +export async function GET(_request: Request, { params }: { params: Promise<{ locale: string }> }) { const { locale } = await params const loc = routing.locales.includes(locale as (typeof routing.locales)[number]) ? locale : routing.defaultLocale const session = await getSession() session.destroy() - return NextResponse.redirect(new URL(`/${loc}`, request.url), { status: 303 }) + return new NextResponse(null, { status: 303, headers: { Location: `/${loc}` } }) }