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:
@@ -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 />
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user