Files
NightSpire/web-next/app/[locale]/log-out/route.ts
T
Inna 434011624c Barra final solo en la raíz de idioma (/es/), resto de rutas sin barra
trailingSlash true ponía barra en todo (/es/content-creators/). Se pasa a
skipTrailingSlashRedirect + normalización en middleware: raíz de idioma /es → /es/
(con barra), y cualquier sub-ruta con barra final se redirige sin ella
(/es/x/ → /es/x). Sin bucles. Las /api quedan fuera del middleware (sin 308).
El redirect del logout apunta a /es/.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-14 15:36:13 +00:00

24 lines
1.0 KiB
TypeScript

import { NextResponse } from 'next/server'
import { getSession } from '@/lib/session'
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 }> }) {
const { locale } = await params
const loc = routing.locales.includes(locale as (typeof routing.locales)[number]) ? locale : routing.defaultLocale
const session = await getSession()
session.destroy()
// La raíz de idioma es canónica CON barra (/es/); el resto de rutas sin barra.
return new NextResponse(null, { status: 303, headers: { Location: `/${loc}/` } })
}