frontend/src/pages/Login.jsxjavascript · @kibot
20/9/2026, 17:58:07import React, { useState } from 'react';
import axios from 'axios';
const API_URL = 'http://localhost:8000';
const Login = () => {
const [email, setEmail] = useState('');
const [password, setPassword] = useState('');
const [error, setError] = useState('');
const [loading, setLoading] = useState(false);
const handleLogin = async (e) => {
e.preventDefault();
setLoading(true);
setError('');
try {
const response = await axios.post(`${API_URL}/auth/login`, { email, password });
localStorage.setItem('token', response.data.access_token);
window.location.href = '/';
} catch (err) {
setError(err.response?.data?.detail || 'Error al iniciar sesión');
} finally {
setLoading(false);
}
};
const handleRegister = async (e) => {
e.preventDefault();
setLoading(true);
setError('');
try {
const response = await axios.post(`${API_URL}/auth/register`, { email, password });
localStorage.setItem('token', response.data.access_token);
window.location.href = '/';
} catch (err) {
setError(err.response?.data?.detail || 'Error al registrarse');
} finally {
setLoading(false);
}
};
return (
<div className="login-container">
<h2>Iniciar Sesión</h2>
{error && <p className="error">{error}</p>}
<form onSubmit={handleLogin}>
<input
type="email"
value={email}
onChange={(e) => setEmail(e.target.value)}
placeholder="Email"
required
/>
<input
type="password"
value={password}
onChange={(e) => setPassword(e.target.value)}
placeholder="Contraseña"
required
/>
<button type="submit" disabled={loading}>Entrar</button>
</form>
<div className="register-link">
¿No tienes cuenta? <a href="/register">Regístrate aquí</a>
</div>
</div>
);
};
export default Login;