diff --git a/frontend/src/pages/Login.jsx b/frontend/src/pages/Login.jsx index e6a48ff..9cd64ec 100644 --- a/frontend/src/pages/Login.jsx +++ b/frontend/src/pages/Login.jsx @@ -1,87 +1,99 @@ -import { useState } from 'react'; -import { useNavigate, Link } from 'react-router-dom'; +import React, { useState, useEffect, useRef } from 'react'; +import { Link, useNavigate, useSearchParams } from 'react-router-dom'; import { useAuth } from '../context/AuthContext'; import { authService } from '../services/authService'; export default function Login() { - const [email, setEmail] = useState(''); - const [password, setPassword] = useState(''); - const [error, setError] = useState(''); - const navigate = useNavigate(); - const { login } = useAuth(); + const [email, setEmail] = useState(''); + const [password, setPassword] = useState(''); + const [error, setError] = useState(''); + const navigate = useNavigate(); + const { login } = useAuth(); + const [searchParams] = useSearchParams(); + const googleLoginProcessed = useRef(false); - const handleSubmit = async (e) => { - e.preventDefault(); - setError(''); + useEffect(() => { + const token = searchParams.get('token'); + + if (token && !googleLoginProcessed.current) { + googleLoginProcessed.current = true; + const url = new URL(window.location); + url.searchParams.delete('token'); + window.history.replaceState({}, '', url); + + const fetchUserAndLogin = async () => { try { - const data = await authService.login(email, password); - - const userData = { - id: data.user_id, - username: data.username, - email: email - }; - - login(userData, data.token); - navigate('/'); + localStorage.setItem('token', token); + + const realUserData = await authService.getCurrentUser(); + + login({ user: realUserData, token }); + + navigate('/', { replace: true }); } catch (err) { - setError(err.response?.data?.detail || 'Error al iniciar sesión. Revisa tus credenciales.'); + console.error("Error al sincronizar perfil de Google:", err); + setError("Error de sincronización con Google. Inténtalo de nuevo."); + localStorage.removeItem('token'); } - }; + }; + + fetchUserAndLogin(); + } + }, [searchParams, login, navigate]); + + const handleSubmit = async (e) => { + e.preventDefault(); + setError(''); + try { + const userData = await authService.login(email, password); + login(userData); + navigate('/'); + } catch (err) { + setError('Credenciales incorrectas.'); + } + }; + + const handleGoogleLogin = () => { + window.location.href = "http://localhost:8000/api/auth/google/login"; + }; return ( -
Inicia sesión para guardar tus espectros difusos
+Accede a tu panel de control