61ca63a55f
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>
58 lines
2.1 KiB
TypeScript
58 lines
2.1 KiB
TypeScript
import type { Metadata } from 'next'
|
|
import { getTranslations, setRequestLocale } from 'next-intl/server'
|
|
import { getSession } from '@/lib/session'
|
|
import { PageShell } from '@/components/PageShell'
|
|
import { RegisterForm } from './RegisterForm'
|
|
|
|
// Lee la sesión (cookies), así que no se puede prerenderizar.
|
|
export const dynamic = 'force-dynamic'
|
|
|
|
export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }): Promise<Metadata> {
|
|
const { locale } = await params
|
|
const t = await getTranslations({ locale, namespace: 'Register' })
|
|
return { title: t('title') }
|
|
}
|
|
|
|
export default async function CreateAccountPage({ params }: { params: Promise<{ locale: string }> }) {
|
|
const { locale } = await params
|
|
setRequestLocale(locale)
|
|
const t = await getTranslations('Register')
|
|
// El cuadro informativo se queda: sigue explicando cómo son las cuentas aunque
|
|
// ya tengas sesión. Lo que se sustituye es el formulario.
|
|
const session = await getSession()
|
|
|
|
return (
|
|
<PageShell title={t('title')}>
|
|
<div className="box-content" tabIndex={-1}>
|
|
<div className="body-box-content info-box-light justified">
|
|
<p>{t('bnetType')}</p>
|
|
<p>{t('passwordRule')}</p>
|
|
<p>{t('emailRule')}</p>
|
|
<br />
|
|
<p>{t('activation1')}</p>
|
|
<p>{t('activation2')}</p>
|
|
<p>
|
|
<i className="fas fa-exclamation-triangle"></i> {t('loginHint')}
|
|
</p>
|
|
</div>
|
|
</div>
|
|
<div className="box-content">
|
|
<div className="body-box-content centered">
|
|
{session.bnetId ? (
|
|
<>
|
|
<p>{t('alreadyLogged')}</p>
|
|
<br />
|
|
{/* `<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 />
|
|
)}
|
|
</div>
|
|
</div>
|
|
</PageShell>
|
|
)
|
|
}
|