e.preventDefault();
const correo = document.getElementById("correo").value;
const contrasena = document.getElementById("contrasena").value;
const res = await fetch("http://localhost:3000/api/votantes/login", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ correo, contrasena }),
credentials: "include" //
});
if (res.ok) {
window.location.href = "votacion.html";
} else {
const data = await res.json();
alert(data.error);
}
});
< /code>
Функция входа в систему: < /p>
router.post('/login', (req, res) => {
const { correo, contrasena } = req.body;
db.query(
'SELECT * FROM votantes WHERE correo = ? AND contrasena = ?',
[correo, contrasena],
(err, resultados) => {
if (err) return res.status(500).json({ error: 'Error en login' });
if (resultados.length === 0) {
return res.status(401).json({ error: 'Credenciales inválidas' });
}
// Guardar usuario en la sesión
req.session.usuario = resultados[0];
res.json({ mensaje: 'Login exitoso' });
}
);
});
< /code>
Кнопка выхода: < /p>
Cerrar sesión
< /code>
Функция журнала: < /p>
function logout() {
fetch("http://localhost:3000/api/votantes/logout", {
credentials: "include"
})
.then(() => {
window.location.href = "login.html";
})
.catch((err) => {
console.error("Error al cerrar sesión:", err);
alert("Error al cerrar sesión");
});
}
< /code>
endpoint: < /p>
app.get("/logout", (req, res) => {
req.session.destroy((err) => {
if (err) {
console.error("Error al cerrar sesión:", err);
return res.status(500).json({ error: "No se pudo cerrar sesión" });
}
localStorage.removeItem("votante"); // limpia datos de sesión local
res.clearCookie("connect.sid");
res.json({ mensaje: "Sesión cerrada" });
});
});
Подробнее здесь: https://stackoverflow.com/questions/797 ... he-session
Мобильная версия