Arreglar cierre de sesión solo: <Link> prefetcheaba /log-out

Regresión del commit anterior. /log-out es un GET que destruye la sesión, y yo
lo enlacé con <Link>: el router de Next lo prefetchea al entrar en pantalla, así
que la cookie se borraba sin que nadie pulsara. La página se renderizaba en el
servidor con la sesión («¡Ya estás conectado!») y al recargar ya no había sesión.

Reproducido: una petición de prefetch (RSC: 1, Next-Router-Prefetch: 1) a
/es/log-out responde `set-cookie: nightspire_session=; Max-Age=0`.

Se enlaza con <a> plano, que es justo como lo hace SiteHeader. Queda comentado
en ambos sitios para que no vuelva a colarse.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-15 18:27:02 +00:00
parent c46cea2807
commit 61ca63a55f
2 changed files with 8 additions and 3 deletions
@@ -1,6 +1,5 @@
import type { Metadata } from 'next'
import { getTranslations, setRequestLocale } from 'next-intl/server'
import { Link } from '@/i18n/navigation'
import { getSession } from '@/lib/session'
import { PageShell } from '@/components/PageShell'
import { RegisterForm } from './RegisterForm'
@@ -43,7 +42,10 @@ export default async function CreateAccountPage({ params }: { params: Promise<{
<>
<p>{t('alreadyLogged')}</p>
<br />
<p>{t.rich('alreadyLoggedCreate', { logout: (c) => <Link href="/log-out">{c}</Link> })}</p>
{/* `<a>` plano, NUNCA <Link>: /log-out es un GET que destruye la sesión,
y <Link> lo prefetcharía al entrar en pantalla, cerrándola sola sin
que nadie pulse. SiteHeader lo enlaza así por lo mismo. */}
<p>{t.rich('alreadyLoggedCreate', { logout: (c) => <a href={`/${locale}/log-out`}>{c}</a> })}</p>
</>
) : (
<RegisterForm />
+4 -1
View File
@@ -22,7 +22,10 @@ export default async function LoginPage({ params }: { params: Promise<{ locale:
<div className="body-box-content centered">
<p>{t('alreadyLogged')}</p>
<br />
<p>{t.rich('alreadyLoggedOther', { logout: (c) => <Link href="/log-out">{c}</Link> })}</p>
{/* `<a>` plano, NUNCA <Link>: /log-out es un GET que destruye la sesión,
y <Link> lo prefetcharía al entrar en pantalla, cerrándola sola sin
que nadie pulse. SiteHeader lo enlaza así por lo mismo. */}
<p>{t.rich('alreadyLoggedOther', { logout: (c) => <a href={`/${locale}/log-out`}>{c}</a> })}</p>
</div>
</div>
</PageShell>