diff --git a/assets/scripts/auth.js b/assets/scripts/auth.js index 5d582a3..71d4de4 100644 --- a/assets/scripts/auth.js +++ b/assets/scripts/auth.js @@ -33,6 +33,7 @@ async function authFetch(input, options = {}) { const response = await fetch(input, { ...options, + credentials: options.credentials || "same-origin", headers: authHeaders(options.headers), }); @@ -47,6 +48,7 @@ async function login(username, password) { const response = await fetch("/api/auth/login", { method: "POST", + credentials: "same-origin", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ username, password }), }); @@ -60,6 +62,18 @@ return data.token; } + async function hasServerSession() { + if (token()) return true; + + const response = await fetch("/api/auth/check", { + method: "GET", + credentials: "same-origin", + cache: "no-store", + }); + + return response.status === 204; + } + function initLoginForm() { const form = document.getElementById("login-form"); if (!form) return; @@ -91,15 +105,19 @@ fetch: authFetch, headers: authHeaders, token, - logout: () => { + logout: async () => { + await fetch("/api/auth/logout", { + method: "POST", + credentials: "same-origin", + }).catch(() => {}); window.localStorage.removeItem(TOKEN_KEY); redirectToLogin(); }, }; - document.addEventListener("DOMContentLoaded", () => { + document.addEventListener("DOMContentLoaded", async () => { initLoginForm(); - if (!isLoginPage() && !token()) { + if (!isLoginPage() && !(await hasServerSession())) { redirectToLogin(); } }); diff --git a/posts/posts-list.org b/posts/posts-list.org index c0ec23e..90d111b 100644 --- a/posts/posts-list.org +++ b/posts/posts-list.org @@ -4,7 +4,7 @@ See the categories: @@html:Categories@@ * Posts: -- [[file:career/career-list.org][Career List]] @@html:09-05-2026 00:54@@ +- [[file:career/career-list.org][Career List]] @@html:09-05-2026 01:10@@ - [[file:posts-list.sync-conflict-20260509-005434-VT6366A.org][Posts List]] @@html:09-05-2026 00:54@@ - [[file:posts-list.sync-conflict-20260417-233432-VT6366A.org][Posts List]] @@html:14-04-2026 16:36@@ - [[file:career/ha-dr.org][High Availability, Disaster Recovery and Business Continuity]] @@html:11-03-2026 17:18@@ @@html:learning@@ @@html:notes@@ diff --git a/sitemap.org b/sitemap.org index 767257a..66bd71d 100644 --- a/sitemap.org +++ b/sitemap.org @@ -13,12 +13,12 @@ - [[file:tags/notes.org][Tag: notes]] - [[file:tags/review.org][Tag: review]] - [[file:tags/website.org][Tag: website]] - - [[file:tags/life.org][Tag: life]] - [[file:tags/update.org][Tag: update]] - - [[file:tags/insights.org][Tag: insights]] - - [[file:tags/emacs.org][Tag: emacs]] + - [[file:tags/life.org][Tag: life]] - [[file:tags/education.org][Tag: education]] + - [[file:tags/insights.org][Tag: insights]] - [[file:tags/reading.org][Tag: reading]] + - [[file:tags/emacs.org][Tag: emacs]] - [[file:tags/maths.org][Tag: maths]] - books - [[file:books/books-list.org][Books List]]