diff --git a/apps/web/src/routes/login/+server.ts b/apps/web/src/routes/login/+server.ts index 785108f..9b4f397 100644 --- a/apps/web/src/routes/login/+server.ts +++ b/apps/web/src/routes/login/+server.ts @@ -17,8 +17,8 @@ function escapeHtml(s: string): string { .replaceAll("'", '''); } -// GET: página intermedia para evitar que los “link preview bots” canjeen el token. -// Muestra un formulario que hace POST automático para canjear el token. +// GET: página intermedia que requiere una interacción mínima y establece una cookie "login_intent" vía JS. +// Evita que bots de previsualización canjeen el token antes de que el usuario haga clic. export const GET: RequestHandler = async (event) => { const token = event.url.searchParams.get('token')?.trim(); if (!token) { @@ -26,26 +26,45 @@ export const GET: RequestHandler = async (event) => { return new Response('Falta el token', { status: 400 }); } + // Nonce para "gate de JS" + const nonce = randomTokenBase64Url(18); + const html = `
-Para continuar, pulsa “Continuar”. Si no funciona, asegúrate de abrir este enlace en tu navegador.
+ + +