From 16f82945c8164d53492e10330fb33714dc76da2b Mon Sep 17 00:00:00 2001 From: Alexis Date: Tue, 14 Apr 2026 13:35:54 +0200 Subject: [PATCH] =?UTF-8?q?refactor:=20unificar=20estilos=20de=20login=20y?= =?UTF-8?q?=20register,=20simplificar=20header=20con=20un=20solo=20bot?= =?UTF-8?q?=C3=B3n=20para=20acceder=20en=20lugar=20de=20dos=20para=20inici?= =?UTF-8?q?ar=20sesi=C3=B3n=20y=20registrarse.=20A=C3=B1adir=20confirmaci?= =?UTF-8?q?=C3=B3n=20de=20contrase=C3=B1a=20en=20el=20registro.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/components/layout/Header.jsx | 18 +++--- frontend/src/pages/Login.jsx | 12 ++-- frontend/src/pages/Register.jsx | 77 ++++++++++++----------- 3 files changed, 59 insertions(+), 48 deletions(-) diff --git a/frontend/src/components/layout/Header.jsx b/frontend/src/components/layout/Header.jsx index 98a6b7f..7596a6a 100644 --- a/frontend/src/components/layout/Header.jsx +++ b/frontend/src/components/layout/Header.jsx @@ -32,7 +32,7 @@ export default function Header() {
-
+
Editor @@ -44,10 +44,10 @@ export default function Header() {
{isAuthenticated ? ( -
+
@@ -60,7 +60,7 @@ export default function Header() {

Usuario

{user?.username}

-
@@ -68,9 +68,13 @@ export default function Header() { )}
) : ( -
- Entrar - Registrarse +
+ + Acceder +
)}
diff --git a/frontend/src/pages/Login.jsx b/frontend/src/pages/Login.jsx index c75e3fd..12b60c9 100644 --- a/frontend/src/pages/Login.jsx +++ b/frontend/src/pages/Login.jsx @@ -1,4 +1,4 @@ -import React, { useState, useEffect, useRef } from 'react'; +import { useState, useEffect, useRef } from 'react'; import { Link, useNavigate, useSearchParams } from 'react-router-dom'; import { useAuth } from '../context/AuthContext'; import { authService } from '../services/authService'; @@ -44,7 +44,9 @@ export default function Login() { } catch (err) { console.error("Error al decodificar el token de Google:", err); - setError("Error al procesar el login con Google. El token está corrupto."); + setTimeout(() => { + setError("Error al procesar el login con Google. El token está corrupto."); + }, 0); } } }, [searchParams, login, navigate]); @@ -66,12 +68,12 @@ export default function Login() { }; return ( -
+
-

Deck of Cards

-

Accede a tu panel de control

+

Iniciar sesión

+

Únete para guardar tu progreso

{error && ( diff --git a/frontend/src/pages/Register.jsx b/frontend/src/pages/Register.jsx index 3055c9d..ad80d0c 100644 --- a/frontend/src/pages/Register.jsx +++ b/frontend/src/pages/Register.jsx @@ -7,6 +7,7 @@ export default function Register() { const [username, setUsername] = useState(''); const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); + const [confirmPassword, setConfirmPassword] = useState(''); const [error, setError] = useState(''); const navigate = useNavigate(); const { login } = useAuth(); @@ -15,6 +16,11 @@ export default function Register() { e.preventDefault(); setError(''); + if (password !== confirmPassword) { + setError('Las contraseñas no coinciden. Por favor, revísalas.'); + return; + } + try { const data = await authService.register(username, email, password); @@ -32,69 +38,68 @@ export default function Register() { }; return ( -
-
+
+
+
-

Crear Cuenta

+

Crear Cuenta

Únete para guardar tu progreso

{error && ( -
+
{error}
)} -
-
- + +
+ setUsername(e.target.value)} - placeholder="Ej: alexis99" + type="text" required autoComplete="username" + className="w-full px-5 py-3 rounded-2xl border border-slate-200 focus:ring-2 focus:ring-blue-500 outline-none transition-all bg-slate-50 focus:bg-white" + value={username} onChange={(e) => setUsername(e.target.value)} + placeholder="Ej: usuario" />
-
- +
+ setEmail(e.target.value)} + type="email" required autoComplete="email" + className="w-full px-5 py-3 rounded-2xl border border-slate-200 focus:ring-2 focus:ring-blue-500 outline-none transition-all bg-slate-50 focus:bg-white" + value={email} onChange={(e) => setEmail(e.target.value)} placeholder="tu@email.com" />
-
- +
+ setPassword(e.target.value)} + type="password" required autoComplete="new-password" + className="w-full px-5 py-3 rounded-2xl border border-slate-200 focus:ring-2 focus:ring-blue-500 outline-none transition-all bg-slate-50 focus:bg-white" + value={password} onChange={(e) => setPassword(e.target.value)} placeholder="••••••••" />
- -

- ¿Ya tienes cuenta? Inicia sesión aquí +

+ ¿Ya tienes cuenta? Inicia sesión aquí