/** * =============================================================================== * FILE: static/js/auth.js * ROLE: Управление сессией пользователя, токенами и корректным выходом (Logout). * =============================================================================== */ const AuthManager = { getToken() { let token = localStorage.getItem("auth_token") || localStorage.getItem("token"); if (!token) { // Если токена нет — инициализируем рабочий дефолтный токен token = "dev_token_1"; localStorage.setItem("auth_token", token); localStorage.setItem("user_id", "1"); } return token; }, getUserId() { return parseInt(localStorage.getItem("user_id") || "1", 10); }, logout() { console.log("[Auth] Выполняется выход из учетной записи..."); // 1. Полная очистка хранилищ браузера localStorage.removeItem("auth_token"); localStorage.removeItem("token"); localStorage.removeItem("user_id"); sessionStorage.clear(); // 2. Сброс авторизационных cookies (если присутствуют) document.cookie.split(";").forEach((cookie) => { const eqPos = cookie.indexOf("="); const name = eqPos > -1 ? cookie.substr(0, eqPos).trim() : cookie.trim(); document.cookie = `${name}=;expires=Thu, 01 Jan 1970 00:00:00 GMT;path=/`; }); // 3. Перезагрузка страницы для сброса состояния интерфейса window.location.reload(); }, init() { // Привязка клика ко всем элементам с классом или id logout document.addEventListener("DOMContentLoaded", () => { const logoutBtns = document.querySelectorAll("#logout-btn, .logout-btn, [data-action='logout']"); logoutBtns.forEach(btn => { btn.addEventListener("click", (e) => { e.preventDefault(); AuthManager.logout(); }); }); }); } }; // Инициализация при загрузке скрипта AuthManager.init(); // Глобальная доступность функции для onclick в HTML window.logout = () => AuthManager.logout();