From c46cea28071f4d8fdf1b8410bd5c6d224d918a3e Mon Sep 17 00:00:00 2001 From: adevopg Date: Wed, 15 Jul 2026 18:18:23 +0000 Subject: [PATCH] =?UTF-8?q?Log-in=20y=20crear=20cuenta:=20avisar=20si=20ya?= =?UTF-8?q?=20hay=20sesi=C3=B3n=20en=20vez=20de=20ofrecer=20el=20formulari?= =?UTF-8?q?o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) --- web-next/app/[locale]/create-account/page.tsx | 18 +++++++++++++++- web-next/app/[locale]/log-in/page.tsx | 21 +++++++++++++++++++ web-next/messages/en.json | 4 ++++ web-next/messages/es.json | 4 ++++ 4 files changed, 46 insertions(+), 1 deletion(-) diff --git a/web-next/app/[locale]/create-account/page.tsx b/web-next/app/[locale]/create-account/page.tsx index e38317a..766be76 100644 --- a/web-next/app/[locale]/create-account/page.tsx +++ b/web-next/app/[locale]/create-account/page.tsx @@ -1,8 +1,13 @@ 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' +// 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 { const { locale } = await params const t = await getTranslations({ locale, namespace: 'Register' }) @@ -13,6 +18,9 @@ export default async function CreateAccountPage({ params }: { params: Promise<{ 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 ( @@ -31,7 +39,15 @@ export default async function CreateAccountPage({ params }: { params: Promise<{
- + {session.bnetId ? ( + <> +

{t('alreadyLogged')}

+
+

{t.rich('alreadyLoggedCreate', { logout: (c) => {c} })}

+ + ) : ( + + )}
diff --git a/web-next/app/[locale]/log-in/page.tsx b/web-next/app/[locale]/log-in/page.tsx index 398fa6b..77dc5a4 100644 --- a/web-next/app/[locale]/log-in/page.tsx +++ b/web-next/app/[locale]/log-in/page.tsx @@ -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 ( + +
+
+

{t('alreadyLogged')}

+
+

{t.rich('alreadyLoggedOther', { logout: (c) => {c} })}

+
+
+
+ ) + } + return (
diff --git a/web-next/messages/en.json b/web-next/messages/en.json index 0953e87..828a87e 100644 --- a/web-next/messages/en.json +++ b/web-next/messages/en.json @@ -33,6 +33,8 @@ }, "Login": { "title": "Sign in to NightSpire", + "alreadyLogged": "You are already signed in!", + "alreadyLoggedOther": "If you want to sign in with another account, sign out first.", "email": "Email", "password": "Password", "submit": "Sign in", @@ -170,6 +172,8 @@ }, "Register": { "title": "Create account", + "alreadyLogged": "You are already signed in!", + "alreadyLoggedCreate": "If you want to create an account, sign out first.", "password": "Password", "confPassword": "Confirm password", "email": "Gmail email address", diff --git a/web-next/messages/es.json b/web-next/messages/es.json index 254d698..70102c1 100644 --- a/web-next/messages/es.json +++ b/web-next/messages/es.json @@ -33,6 +33,8 @@ }, "Login": { "title": "Conectar a NightSpire", + "alreadyLogged": "¡Ya estás conectado!", + "alreadyLoggedOther": "Si quieres conectar otra cuenta, primero desconecta.", "email": "Correo electrónico", "password": "Contraseña", "submit": "Conectar", @@ -170,6 +172,8 @@ }, "Register": { "title": "Creación de cuenta", + "alreadyLogged": "¡Ya estás conectado!", + "alreadyLoggedCreate": "Si quieres crear una cuenta, primero desconecta.", "password": "Contraseña", "confPassword": "Confirmar contraseña", "email": "Correo electrónico de Gmail",