Log-in y crear cuenta: avisar si ya hay sesión en vez de ofrecer el formulario

Ninguna de las dos miraba la sesión, así que quien ya estaba conectado veía el
formulario de login o el de registro. Ahora, con `bnetId` en sesión (lo mismo que
da por buena la sesión en el resto del sitio), sale «¡Ya estás conectado!» y un
enlace a /log-out, como las plantillas del tema.

En crear cuenta el cuadro informativo se mantiene: sigue explicando cómo son las
cuentas aunque ya tengas sesión. Solo se sustituye el formulario.

Las dos pasan a `force-dynamic`: leen cookies y no se pueden prerenderizar.

Verificado en producción sellando una cookie de sesión real con iron-session:
con sesión salen los dos avisos y desaparece el formulario; sin sesión el
formulario sigue ahí y el aviso no se renderiza.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-15 18:18:23 +00:00
parent d46cea9631
commit c46cea2807
4 changed files with 46 additions and 1 deletions
+21
View File
@@ -1,13 +1,34 @@
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 />
<p>{t.rich('alreadyLoggedOther', { logout: (c) => <Link href="/log-out">{c}</Link> })}</p>
</div>
</div>
</PageShell>
)
}
return (
<PageShell title={t('title')}>
<div className="box-content">