Fix: logout instantly if backend connection not established or user not found in db

This commit is contained in:
hyzen
2026-06-09 12:51:35 +05:30
parent 15266c9184
commit 3995a84a0f
47 changed files with 138 additions and 111 deletions

View File

@@ -110,72 +110,7 @@
</header>
<main class="main">{{ block "main" . }}{{ end }}</main>
<footer class="footer">{{ partial "footer.html" . }}</footer>
{{ partial "body/body-end.html" . }} {{ partial "body/body-end.html" . }}
<script>
(function () {
var path = window.location.pathname;
if (path === '/login/' || path === '/signup/') return;
// ── Save current page before navigating to login/signup ──
document
.querySelectorAll('a[href="/login/"], a[href="/signup/"]')
.forEach(function (a) {
a.addEventListener('click', function () {
sessionStorage.setItem('f4_login_next', path);
});
});
// ── Validate session on every page load ──
if (!localStorage.getItem('f4_username')) return;
// Skip check if we just logged in (5 second grace period)
var _loginTime = parseInt(localStorage.getItem('f4_login_time') || '0', 10);
if (Date.now() - _loginTime < 5000) return;
fetch('https://backend.freedoms4.org/auth.php', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
credentials: 'include',
body: JSON.stringify({ action: 'check_session' }),
})
.then(function (r) {
return r.json();
})
.then(function (data) {
if (!data.valid) {
if (data.db_error) {
// DB error — count consecutive failures, force logout after 3
var fails =
parseInt(localStorage.getItem('f4_session_fails') || '0', 10) +
1;
localStorage.setItem('f4_session_fails', fails);
if (fails >= 3) {
localStorage.removeItem('f4_username');
localStorage.removeItem('f4_login_time');
localStorage.removeItem('f4_session_fails');
window.location.reload();
}
} else {
// Session truly invalid — log out immediately
localStorage.removeItem('f4_username');
localStorage.removeItem('f4_login_time');
localStorage.removeItem('f4_session_fails');
window.location.reload();
}
} else {
// Valid session — reset failure counter
localStorage.removeItem('f4_session_fails');
}
})
.catch(function () {
// Backend completely unreachable (404, files gone, server down)
// Force logout immediately
localStorage.removeItem('f4_username');
localStorage.removeItem('f4_login_time');
localStorage.removeItem('f4_session_fails');
window.location.reload();
});
})();
</script>
{{ partial "body/body-end.html" . }}
<script src="/js/session-check.js"></script>
</body>
</html>