Alternative fix for issue highlighted in PR #337 by @kontaxis
authorAdam Dullage <redacted>
Fri, 17 Oct 2025 11:38:49 +0000 (12:38 +0100)
committerAdam Dullage <redacted>
Fri, 17 Oct 2025 11:38:49 +0000 (12:38 +0100)
client/api.js
client/router.js
server/main.py

index d27d3b5eca0492d6e23600e55379806726a18b6a..b1c629ead4636d9e84e97f6841a4aaabdc51c573 100644 (file)
@@ -48,8 +48,8 @@ export async function getConfig() {
   try {
     const response = await api.get("api/config");
     return response.data;
-  } catch (error) {
-    return Promise.reject(error);
+  } catch (response) {
+    return Promise.reject(response);
   }
 }
 
@@ -65,6 +65,15 @@ export async function getToken(username, password, totp) {
   }
 }
 
+export async function authCheck() {
+  try {
+    const response = await api.get("api/auth-check");
+    return response.data;
+  } catch (response) {
+    return Promise.reject(response);
+  }
+}
+
 export async function getNotes(term, sort, order, limit) {
   try {
     const response = await api.get("api/search", {
index 81b2314b3c62e9fd1bb31124c024e625a0640b42..e86dbc9ca52f56a26bd87b56a4153d151a7cfc0e 100644 (file)
@@ -2,6 +2,8 @@ import * as constants from "./constants.js";
 \r
 import { createRouter, createWebHistory } from "vue-router";\r
 \r
+import { authCheck } from "./api.js";\r
+\r
 const router = createRouter({\r
   history: createWebHistory(""),\r
   routes: [\r
@@ -39,6 +41,27 @@ const router = createRouter({
   ],\r
 });\r
 \r
+// Check the user is authenticated on first navigation (unless going to login)\r
+let authChecked = false;\r
+router.beforeEach(async (to) => {\r
+  if (authChecked || to.name === "login") {\r
+    return;\r
+  }\r
+  try {\r
+    await authCheck();\r
+    return;\r
+  } catch (error) {\r
+    if (error.response && error.response.status === 401) {\r
+      return {\r
+        name: "login",\r
+        query: { [constants.params.redirect]: to.fullPath },\r
+      };\r
+    }\r
+  } finally {\r
+    authChecked = true;\r
+  }\r
+});\r
+\r
 router.afterEach((to) => {\r
   let title = "flatnotes";\r
   if (to.name === "note") {\r
index 1cc0701f8011f7065b3c88be4329658da1b10522..2bca5ee63ade42e3618bf4c1394ae5e4d6a7e536 100644 (file)
@@ -42,7 +42,7 @@ def root(title: str = ""):
 # endregion\r
 \r
 \r
-# region Login\r
+# region Auth\r
 if global_config.auth_type not in [AuthType.NONE, AuthType.READ_ONLY]:\r
 \r
     @router.post("/api/token", response_model=Token)\r
@@ -55,6 +55,13 @@ if global_config.auth_type not in [AuthType.NONE, AuthType.READ_ONLY]:
             )\r
 \r
 \r
+@router.get("/api/auth-check", dependencies=auth_deps)\r
+def auth_check() -> str:\r
+    """A lightweight endpoint that simply returns 'OK' if the user is\r
+    authenticated."""\r
+    return "OK"\r
+\r
+\r
 # endregion\r
 \r
 \r
git clone https://git.99rst.org/PROJECT