From 98e60d31536863a3853f9654cd1ed5acc5813b21 Mon Sep 17 00:00:00 2001 From: David Ludwig Date: Fri, 16 Apr 2021 14:16:26 -0500 Subject: [PATCH] Add Vuex. Transfer Auth to store. Remove logging. Add remember me functionality --- package.json | 1 + src/app/App.vue | 5 +- src/app/auth.ts | 111 ---------------- src/app/components/CheckBox.vue | 18 ++- src/app/components/MovieModal.vue | 2 +- src/app/components/TextBox.vue | 3 +- src/app/index.ts | 2 + src/app/routes/index.ts | 34 ++++- src/app/shims-vuex.d.ts | 9 ++ src/app/store/actions.ts | 122 ++++++++++++++++++ src/app/store/generics.ts | 36 ++++++ src/app/store/getters.ts | 31 +++++ src/app/store/index.ts | 36 ++++++ src/app/store/mutations.ts | 69 ++++++++++ src/app/store/schema.ts | 6 + src/app/store/state.ts | 15 +++ src/app/views/Home.vue | 5 +- src/app/views/Login.vue | 54 +++----- .../services/WebServer/middleware/auth.ts | 2 - yarn.lock | 10 +- 20 files changed, 406 insertions(+), 165 deletions(-) delete mode 100644 src/app/auth.ts create mode 100644 src/app/shims-vuex.d.ts create mode 100644 src/app/store/actions.ts create mode 100644 src/app/store/generics.ts create mode 100644 src/app/store/getters.ts create mode 100644 src/app/store/index.ts create mode 100644 src/app/store/mutations.ts create mode 100644 src/app/store/schema.ts create mode 100644 src/app/store/state.ts diff --git a/package.json b/package.json index 4521828..a81e2f4 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,7 @@ "vue": "^3.0.5", "vue-router": "^4.0.6", "vuedraggable": "^4.0.1", + "vuex": "^4.0.0", "websocket": "^1.0.33" }, "devDependencies": { diff --git a/src/app/App.vue b/src/app/App.vue index f24d015..b9faf7c 100644 --- a/src/app/App.vue +++ b/src/app/App.vue @@ -6,11 +6,12 @@ diff --git a/src/app/auth.ts b/src/app/auth.ts deleted file mode 100644 index 67bf47c..0000000 --- a/src/app/auth.ts +++ /dev/null @@ -1,111 +0,0 @@ -import jwtDecode from "jwt-decode"; -import router from "./routes"; - -export interface IUser { - id: number, - name: string, - isAdmin: boolean -} - -/** - * The active JWT - */ -let token: string | null; - -/** - * The decoded user object - */ -let user: IUser | null; - -/** - * Check if the user is an admin - */ -export function isAdmin() { - return user && user.isAdmin; -} - -/** - * Check if the client is authenticated - */ -export function isAuthenticated() { - return Boolean(token); -} - -/** - * Get the logged in user (assumes authentication has been checked) - */ -export function getUser() { - return user; -} - -/** - * Load the token from local storage - */ -export function loadToken() { - try { - token = localStorage.getItem("jwt"); - user = jwtDecode(token); - } catch(e) { - console.log("Failed to load token"); - token = null; - user = null; - return false; - } - console.log("Token loaded", token); - return true; -} - -/** - * Delete the token from local storage - */ -export function forgetToken() { - token = null; - user = null; - localStorage.removeItem("jwt"); -} - -/** - * Store a JWT token in local storage - */ -export function storeToken(jwtToken: string) { - try { - user = jwtDecode(jwtToken); - token = jwtToken; - localStorage.setItem("jwt", jwtToken); - } catch(e) { - user = null; - token = null; - return false; - } - return true; -} - -/** - * Fetch request providing authentication and logout upon unauthorized requests - */ - export async function authFetch(path: string, options: RequestInit = {}): Promise { - console.log("Performing auth fetch"); - options.credentials = "include"; - options.headers = Object.assign(options.headers ?? {}, { - "Authorization": `Bearer ${token}` - }); - let response = await fetch(path, options); - if (response.status === 401) { - // forgetToken(); - console.log("Forgetting token..."); - router.push({ name: "Login" }); - throw Error("Unauthorized"); - } - return response; -} - -/** - * @TODO Remove later - */ -(window).forgetToken = forgetToken; -(window).authFetch = authFetch; - -/** - * Ensure the token is loaded upon startup - */ -loadToken(); diff --git a/src/app/components/CheckBox.vue b/src/app/components/CheckBox.vue index 304eb92..c917e62 100644 --- a/src/app/components/CheckBox.vue +++ b/src/app/components/CheckBox.vue @@ -1,6 +1,6 @@