76 lines
3.2 KiB
JavaScript
76 lines
3.2 KiB
JavaScript
(function(){
|
|
document.addEventListener('DOMContentLoaded', function(){
|
|
const form = document.getElementById('loginForm');
|
|
if (!form) return;
|
|
// Helpers de cookies
|
|
function setCookie(name, value, days){
|
|
const d = new Date();
|
|
d.setTime(d.getTime() + (days*24*60*60*1000));
|
|
const expires = 'expires=' + d.toUTCString();
|
|
const sameSite = 'SameSite=Lax';
|
|
const secure = (location.protocol === 'https:') ? '; Secure' : '';
|
|
document.cookie = name + '=' + encodeURIComponent(value) + '; ' + expires + '; path=/; ' + sameSite + secure;
|
|
}
|
|
function getCookie(name){
|
|
const n = name + '=';
|
|
const ca = document.cookie.split(';');
|
|
for (let c of ca){
|
|
while (c.charAt(0) === ' ') c = c.substring(1);
|
|
if (c.indexOf(n) === 0) return decodeURIComponent(c.substring(n.length, c.length));
|
|
}
|
|
return '';
|
|
}
|
|
function deleteCookie(name){
|
|
document.cookie = name + '=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/; SameSite=Lax';
|
|
}
|
|
|
|
// Prefill desde cookies
|
|
const userInput = document.getElementById('usuario');
|
|
const passInput = document.getElementById('clave');
|
|
const rememberChk = document.getElementById('recordar');
|
|
const savedUser = getCookie('remember_user');
|
|
const savedPass = getCookie('remember_pass');
|
|
if (savedUser) { userInput.value = savedUser; }
|
|
if (savedPass) { passInput.value = savedPass; }
|
|
if (rememberChk) { rememberChk.checked = !!(savedUser || savedPass); }
|
|
|
|
form.addEventListener('submit', function(e){
|
|
e.preventDefault();
|
|
const usuario = document.getElementById('usuario').value.trim();
|
|
const clave = document.getElementById('clave').value;
|
|
const recordar = document.getElementById('recordar') ? document.getElementById('recordar').checked : false;
|
|
const submitBtn = form.querySelector('button[type="submit"]');
|
|
const original = submitBtn ? submitBtn.innerHTML : '';
|
|
if (submitBtn){ submitBtn.disabled = true; submitBtn.innerHTML = 'Ingresando…'; }
|
|
$.ajax({
|
|
url: '/api/login',
|
|
method: 'POST',
|
|
contentType: 'application/json',
|
|
dataType: 'json',
|
|
data: JSON.stringify({usuario, clave})
|
|
}).done(function(resp){
|
|
if (resp && resp.success) {
|
|
// Guardar / limpiar cookies según "Recordar"
|
|
if (recordar) {
|
|
// 10 años
|
|
setCookie('remember_user', usuario, 3650);
|
|
setCookie('remember_pass', clave, 3650);
|
|
} else {
|
|
deleteCookie('remember_user');
|
|
deleteCookie('remember_pass');
|
|
}
|
|
mostrarToast('Login correcto', { type: 'success', delay: 1500 });
|
|
setTimeout(function(){ window.location.href = '/'; }, 300);
|
|
} else {
|
|
mostrarToast((resp && (resp.msg || resp.message)) ? (resp.msg || resp.message) : 'Error de login', { type: 'danger' });
|
|
}
|
|
}).fail(function(xhr){
|
|
const msg = (xhr.responseJSON && (xhr.responseJSON.msg || xhr.responseJSON.message)) ? (xhr.responseJSON.msg || xhr.responseJSON.message) : 'Error de login';
|
|
mostrarToast(msg, { type: 'danger' });
|
|
}).always(function(){
|
|
if (submitBtn){ submitBtn.disabled = false; submitBtn.innerHTML = original; }
|
|
});
|
|
});
|
|
});
|
|
})();
|