From 1f533981c7271efacbfffb3466c4634e2f24855b Mon Sep 17 00:00:00 2001 From: adevopg Date: Tue, 14 Jul 2026 14:54:40 +0000 Subject: [PATCH] =?UTF-8?q?Login:=20navegaci=C3=B3n=20completa=20tras=20au?= =?UTF-8?q?tenticar=20(cabecera=20no=20se=20actualizaba)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Con router.push el layout persiste entre rutas, así que la cabecera seguía mostrando "Conectar/Crear cuenta" tras el login hasta recargar. Ahora login y select-account hacen window.location.assign(/{locale}/...) para que el servidor re-renderice el layout/cabecera con la sesión nueva. Co-Authored-By: Claude Opus 4.8 (1M context) --- web-next/app/[locale]/login/LoginForm.tsx | 11 +++++++---- .../app/[locale]/select-account/SelectAccountForm.tsx | 8 ++++---- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/web-next/app/[locale]/login/LoginForm.tsx b/web-next/app/[locale]/login/LoginForm.tsx index 5a755d6..1efc234 100644 --- a/web-next/app/[locale]/login/LoginForm.tsx +++ b/web-next/app/[locale]/login/LoginForm.tsx @@ -1,15 +1,14 @@ 'use client' import { useState } from 'react' -import { useTranslations } from 'next-intl' -import { useRouter } from '@/i18n/navigation' +import { useTranslations, useLocale } from 'next-intl' import { Turnstile } from '@/components/Turnstile' const ERROR_KEYS = ['invalidCredentials', 'missingFields', 'invalidRequest', 'captchaFailed'] as const export function LoginForm() { const t = useTranslations('Login') - const router = useRouter() + const locale = useLocale() const [email, setEmail] = useState('') const [password, setPassword] = useState('') const [showPw, setShowPw] = useState(false) @@ -36,7 +35,11 @@ export function LoginForm() { const data: { success?: boolean; needsSelection?: boolean; error?: string } = await res.json() if (data.success) { setMessage({ ok: true, text: t('success') }) - router.push(data.needsSelection ? '/select-account' : '/my-account') + // Navegación completa (no del lado cliente): fuerza que el servidor + // re-renderice el layout/cabecera con la sesión nueva. Con router.push + // el layout persiste y la cabecera seguía mostrando "Conectar". + window.location.assign(`/${locale}${data.needsSelection ? '/select-account' : '/my-account'}`) + return } else { const key = (ERROR_KEYS as readonly string[]).includes(data.error ?? '') ? data.error! : 'genericError' setMessage({ ok: false, text: t(key) }) diff --git a/web-next/app/[locale]/select-account/SelectAccountForm.tsx b/web-next/app/[locale]/select-account/SelectAccountForm.tsx index 1a713a7..95e730f 100644 --- a/web-next/app/[locale]/select-account/SelectAccountForm.tsx +++ b/web-next/app/[locale]/select-account/SelectAccountForm.tsx @@ -1,8 +1,7 @@ 'use client' import { useState } from 'react' -import { useTranslations } from 'next-intl' -import { useRouter } from '@/i18n/navigation' +import { useTranslations, useLocale } from 'next-intl' interface GameAccount { id: number @@ -11,7 +10,7 @@ interface GameAccount { export function SelectAccountForm({ accounts }: { accounts: GameAccount[] }) { const t = useTranslations('SelectAccount') - const router = useRouter() + const locale = useLocale() const [busy, setBusy] = useState(null) const [error, setError] = useState(null) @@ -27,7 +26,8 @@ export function SelectAccountForm({ accounts }: { accounts: GameAccount[] }) { body: JSON.stringify({ accountId: id }), }) const data: { success?: boolean } = await res.json() - if (data.success) router.push('/my-account') + // Navegación completa: re-renderiza el layout/cabecera con la cuenta ya elegida. + if (data.success) window.location.assign(`/${locale}/my-account`) else { setError(t('error')) setBusy(null)