90 lines
2.3 KiB
JavaScript
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();
|