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.0 KiB
TypeScript
58 lines
2.0 KiB
TypeScript
import { getTranslations, setRequestLocale } from 'next-intl/server'
|
|
import { Link } from '@/i18n/navigation'
|
|
import { getSession } from '@/lib/session'
|
|
import { PageShell } from '@/components/PageShell'
|
|
import { LoginForm } from './LoginForm'
|
|
|
|
// Lee la sesión (cookies), así que no se puede prerenderizar.
|
|
export const dynamic = 'force-dynamic'
|
|
|
|
export default async function LoginPage({ params }: { params: Promise<{ locale: string }> }) {
|
|
const { locale } = await params
|
|
setRequestLocale(locale)
|
|
const t = await getTranslations('Login')
|
|
|
|
// Ya conectado: `bnetId` basta, es lo que da por buena la sesión el resto del
|
|
// sitio. Sin esto se ofrecía el formulario a quien ya tenía sesión.
|
|
const session = await getSession()
|
|
if (session.bnetId) {
|
|
return (
|
|
<PageShell title={t('title')}>
|
|
<div className="box-content">
|
|
<div className="body-box-content centered">
|
|
<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('alreadyLoggedOther', { logout: (c) => <a href={`/${locale}/log-out`}>{c}</a> })}</p>
|
|
</div>
|
|
</div>
|
|
</PageShell>
|
|
)
|
|
}
|
|
|
|
return (
|
|
<PageShell title={t('title')}>
|
|
<div className="box-content">
|
|
<div className="body-box-content centered">
|
|
<LoginForm />
|
|
<br />
|
|
<p>
|
|
<Link href="/recover">{t('forgot')}</Link>
|
|
</p>
|
|
<p>
|
|
<Link href="/recover">{t('forgotActivation')}</Link>
|
|
</p>
|
|
<br />
|
|
<p>
|
|
{t('newHere')} <Link href="/create-account">{t('createAccount')}</Link>
|
|
</p>
|
|
<br />
|
|
<p className="grey-info2">{t('publicNote')}</p>
|
|
</div>
|
|
</div>
|
|
</PageShell>
|
|
)
|
|
}
|