File size: 2,460 Bytes
a5962a6
6d9a6fb
a5962a6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6d9a6fb
a5962a6
 
 
6d9a6fb
 
 
 
 
a5962a6
 
 
6d9a6fb
 
a5962a6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6d9a6fb
a5962a6
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73

// 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.';
    }
}