diff --git a/src/components/LoginForm.vue b/src/components/LoginForm.vue
index de1c7d2..eccb489 100644
--- a/src/components/LoginForm.vue
+++ b/src/components/LoginForm.vue
@@ -1,6 +1,6 @@
diff --git a/src/components/TopNav.astro b/src/components/TopNav.astro
index d810479..3fb45ef 100644
--- a/src/components/TopNav.astro
+++ b/src/components/TopNav.astro
@@ -9,7 +9,7 @@ import UserAction from './top_nav/UserAction.vue'
Auctions
diff --git a/src/components/lib/gateway.js b/src/components/lib/gateway.js
index 3cd4a15..a8c496c 100644
--- a/src/components/lib/gateway.js
+++ b/src/components/lib/gateway.js
@@ -19,6 +19,7 @@ export async function request(path, options) {
headers: {
'Content-Type': options.contentType ||
(safeFetch ? null : 'application/json'),
+ 'X-Requested-With': 'fetch',
'Authorization': authorization
}
}
diff --git a/src/components/scripts/user_store.js b/src/components/scripts/user_store.js
index 9b1a0bf..394879d 100644
--- a/src/components/scripts/user_store.js
+++ b/src/components/scripts/user_store.js
@@ -1,18 +1,17 @@
-import {$user, setAnonUser, setLoggedInUser} from "../stores/user.js";
+import {$token, setAnon, setToken} from "../stores/token.js";
-const LOCAL_STORAGE_KEY="user"
+const LOCAL_STORAGE_KEY="token"
-$user.subscribe(value => {
- if(value == null || !value.initialized) return;
+$token.subscribe(value => {
+ if(value == null || !value.token) return;
localStorage[LOCAL_STORAGE_KEY] = JSON.stringify(value)
})
window.addEventListener('load', () => {
let data = localStorage[LOCAL_STORAGE_KEY]
- if (data == null) { return setAnonUser() }
+ if (data == null) { return setAnon() }
data = JSON.parse(data)
- if (data == null || data.token == null) { return setAnonUser() }
- if(Date.parse(data.expiresAt) < Date()) { return setAnonUser() }
+ if (data == null || data.token == null) { return setAnon() }
- setLoggedInUser(data.token, data.expiresAt)
+ setToken(data)
})
\ No newline at end of file
diff --git a/src/components/stores/token.js b/src/components/stores/token.js
new file mode 100644
index 0000000..640c9d4
--- /dev/null
+++ b/src/components/stores/token.js
@@ -0,0 +1,23 @@
+import { atom } from 'nanostores'
+
+export const Loading = Symbol("loading")
+export const Anonymous = Symbol("anonymous")
+class Token {
+ constructor({token, expiresAt}) {
+ this.token = token
+ this.expiresAt = new Date(expiresAt)
+ }
+}
+
+export const $token = atom(Loading)
+
+export function setAnon() {
+ $token.set(Anonymous)
+}
+
+export function setToken(data) {
+ let token = new Token(data)
+ if(token.expiresAt >= new Date()) {
+ $token.set(token)
+ } else { setAnon() }
+}
\ No newline at end of file
diff --git a/src/components/stores/user.js b/src/components/stores/user.js
deleted file mode 100644
index a022427..0000000
--- a/src/components/stores/user.js
+++ /dev/null
@@ -1,11 +0,0 @@
-import { atom } from 'nanostores'
-
-export const $user = atom({})
-
-export function setAnonUser() {
- $user.set({initialized: true})
-}
-
-export function setLoggedInUser(token, expiresAt) {
- $user.set({initialized: true, loggedIn: true, token: token, expiresAt: expiresAt})
-}
\ No newline at end of file
diff --git a/src/components/top_nav/UserAction.vue b/src/components/top_nav/UserAction.vue
index 21ff39f..2bfd8b9 100644
--- a/src/components/top_nav/UserAction.vue
+++ b/src/components/top_nav/UserAction.vue
@@ -1,14 +1,14 @@
-
- Login
- {{ user.username || "Username" }}
+
+ Login
+ {{ token.username || "Username" }}