cotizador/assets/js/auth.js

90 lines
2.3 KiB
JavaScript

// Sistema de autenticación con PIN
class AuthManager {
constructor() {
this.usuario = null;
this.autenticado = false;
}
// Verificar si hay sesión activa
async verificarSesion() {
try {
const response = await fetch('/api/auth.php');
const data = await response.json();
if (data.autenticado) {
this.autenticado = true;
this.usuario = data.usuario;
return true;
}
return false;
} catch (error) {
console.error('Error al verificar sesión:', error);
return false;
}
}
// Autenticar con PIN
async autenticar(pin) {
try {
const response = await fetch('/api/auth.php', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ pin })
});
const data = await response.json();
if (data.success) {
this.autenticado = true;
this.usuario = data.usuario;
return { success: true, usuario: data.usuario };
} else {
return { success: false, mensaje: data.mensaje };
}
} catch (error) {
console.error('Error al autenticar:', error);
return { success: false, mensaje: 'Error de conexión' };
}
}
// Cerrar sesión
async cerrarSesion() {
try {
await fetch('/api/auth.php', {
method: 'DELETE'
});
this.autenticado = false;
this.usuario = null;
window.location.href = '/login';
} catch (error) {
console.error('Error al cerrar sesión:', error);
}
}
// Proteger página (redirigir si no está autenticado)
async protegerPagina() {
const sesionActiva = await this.verificarSesion();
if (!sesionActiva) {
window.location.href = '/login';
}
return sesionActiva;
}
obtenerUsuario() {
return this.usuario;
}
estaAutenticado() {
return this.autenticado;
}
}
// Instancia global
const authManager = new AuthManager();