From bc5384e7476c6b5fa027180a6e83c49fadf0ccb6 Mon Sep 17 00:00:00 2001 From: Spythere Date: Sat, 16 Sep 2023 20:18:03 +0200 Subject: [PATCH] fix loginu --- .env | 2 +- src/App.vue | 7 ++++--- src/components/TableActions.vue | 2 ++ src/main.ts | 2 +- src/store.ts | 16 ++++++++++++++-- src/types/types.ts | 1 + src/views/LoginView.vue | 13 +++++-------- src/views/ManagerView.vue | 2 +- 8 files changed, 29 insertions(+), 16 deletions(-) diff --git a/.env b/.env index cffd798..7a60ec8 100644 --- a/.env +++ b/.env @@ -1,3 +1,3 @@ VITE_API_URL="https://stacjownik.spythere.pl" VITE_API_URL_DEV="http://localhost:3001" -VITE_API_DEV=1 \ No newline at end of file +VITE_API_DEV=0 \ No newline at end of file diff --git a/src/App.vue b/src/App.vue index ad3ddd3..7631ad5 100644 --- a/src/App.vue +++ b/src/App.vue @@ -12,6 +12,7 @@ import { AuthState } from './types/types'; import { baseURL, useStore } from './store'; import useLocalStorage from './mixins/useLocalStorage'; import axios from 'axios'; +import { IUser } from './types/types'; export default defineComponent({ components: { PopUpCard }, @@ -32,7 +33,7 @@ export default defineComponent({ try { this.tokenLoading = true; - const response = await axios.post( + const response = await axios.post( '/auth/token', {}, { @@ -41,11 +42,11 @@ export default defineComponent({ } ); + this.store.setUserData(response.data); this.$router.push('/'); - this.store.user = response.data; } catch (error) { + this.store.removeUserData(); this.$router.push('/login'); - this.store.user = null; } this.tokenLoading = false; diff --git a/src/components/TableActions.vue b/src/components/TableActions.vue index 0340c64..878ad00 100644 --- a/src/components/TableActions.vue +++ b/src/components/TableActions.vue @@ -157,7 +157,9 @@ export default defineComponent({ async signOut() { await axios.post('/auth/logout', {}, { baseURL, withCredentials: true }); + this.$router.push('/login'); + this.store.removeUserData(); }, onNotifyCheckboxChange(value: boolean) { diff --git a/src/main.ts b/src/main.ts index 2747ab7..ca8488a 100644 --- a/src/main.ts +++ b/src/main.ts @@ -15,7 +15,7 @@ app.mount('#app'); router.beforeEach((to, from, next) => { const store = useStore(); - if (to.meta.protected && !store.user) { + if (to.meta.protected && !store.user && !window.localStorage.getItem('user')) { next('/login'); return; } diff --git a/src/store.ts b/src/store.ts index 47bb89d..9edc281 100644 --- a/src/store.ts +++ b/src/store.ts @@ -2,7 +2,7 @@ import { defineStore } from 'pinia'; import { AuthState, ILoginResponse, IStore, IUser, SceneryRowItem } from './types/types'; import axios from 'axios'; -export const baseURL = import.meta.env[`VITE_API_URL${import.meta.env.DEV ? '_DEV' : ''}`]; +export const baseURL = import.meta.env[`VITE_API_URL${import.meta.env.DEV === '1' ? '_DEV' : ''}`]; export const useStore = defineStore('store', { state: () => @@ -20,7 +20,7 @@ export const useStore = defineStore('store', { currentStation: null, searchedSceneryName: '', selectedStationName: '', - + user: null, notifyDiscord: true, @@ -70,6 +70,18 @@ export const useStore = defineStore('store', { return response; }, + + setUserData(responseData: IUser) { + this.authState = AuthState.AUTHORIZED; + this.user = responseData; + window.localStorage.setItem('user', JSON.stringify(responseData)); + }, + + removeUserData() { + this.authState = AuthState.UNAUTHORIZED; + this.user = null; + window.localStorage.removeItem('user'); + }, }, getters: { diff --git a/src/types/types.ts b/src/types/types.ts index 425e659..869c2d3 100644 --- a/src/types/types.ts +++ b/src/types/types.ts @@ -90,6 +90,7 @@ export enum AuthState { export interface IUser { name: string; id: number; + iat?: number; } export interface IStore { diff --git a/src/views/LoginView.vue b/src/views/LoginView.vue index 5b7aaf0..c2faa4d 100644 --- a/src/views/LoginView.vue +++ b/src/views/LoginView.vue @@ -23,7 +23,7 @@