Samuel_4.0 / static /auth.js
Lukeetah's picture
Upload 4 files
6d9a6fb verified
// static/auth.js (v2.0)
const loginForm = document.getElementById('login-form');
const registerForm = document.getElementById('register-form');
const errorMessage = document.getElementById('error-message');
function toggleForms() {
errorMessage.textContent = '';
if (loginForm.style.display === 'none') {
loginForm.style.display = 'block';
registerForm.style.display = 'none';
} else {
loginForm.style.display = 'none';
registerForm.style.display = 'block';
}
}
async function login(event) {
event.preventDefault();
errorMessage.textContent = '';
const email = document.getElementById('login-email').value;
const password = document.getElementById('login-password').value;
try {
// Usamos el endpoint /token que establece la cookie HttpOnly
const response = await fetch('/token', {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: new URLSearchParams({
'grant_type': 'password',
'username': email,
'password': password
})
});
if (response.ok) {
// La cookie se establece en el backend. Simplemente redirigimos.
window.location.href = '/';
} else {
const errorData = await response.json();
errorMessage.textContent = errorData.detail || 'Error en el inicio de sesión.';
}
} catch (error) {
errorMessage.textContent = 'No se pudo conectar con el servidor.';
}
}
async function register(event) {
event.preventDefault();
errorMessage.textContent = '';
const email = document.getElementById('register-email').value;
const password = document.getElementById('register-password').value;
try {
const response = await fetch('/register', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ email, password })
});
if (response.status === 201) {
// Registro exitoso, ahora intentar iniciar sesión automáticamente
await login(event);
} else {
const errorData = await response.json();
errorMessage.textContent = errorData.detail || 'Error en el registro.';
}
} catch (error) {
errorMessage.textContent = 'No se pudo conectar con el servidor.';
}
}