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 @@