From 34845b9696cdeff08f1cf590ef2908ead4ca73db Mon Sep 17 00:00:00 2001 From: Robin COuret Date: Fri, 6 Mar 2026 17:42:04 +0100 Subject: [PATCH] add auth flux --- .../src/components/CollectKnowledge.vue | 2 +- .../src/components/EvaluateQuestion.vue | 3 ++- user-interface/src/router/index.ts | 16 +++++++++++++ user-interface/src/services/apiAxios.ts | 17 +++++++++++++- user-interface/src/views/AuthView.vue | 2 ++ user-interface/src/views/ExperimentView.vue | 3 --- user-interface/src/views/WelcomeView.vue | 23 +++++++++++++++++++ 7 files changed, 60 insertions(+), 6 deletions(-) create mode 100644 user-interface/src/views/WelcomeView.vue diff --git a/user-interface/src/components/CollectKnowledge.vue b/user-interface/src/components/CollectKnowledge.vue index 95c0b3e..9ff87f6 100644 --- a/user-interface/src/components/CollectKnowledge.vue +++ b/user-interface/src/components/CollectKnowledge.vue @@ -2,7 +2,7 @@ import { BField, BInput, BButton, useToast } from "buefy"; //import { apiClient } from "@/services/api"; import api from "@/services/apiAxios" - import { AxiosResponse } from "axios"; + import type { AxiosResponse } from "axios"; import { ref } from "vue"; import type { Knowledge, KnowledgeCreate } from "@/types/types"; diff --git a/user-interface/src/components/EvaluateQuestion.vue b/user-interface/src/components/EvaluateQuestion.vue index e3d0cf1..e831d32 100644 --- a/user-interface/src/components/EvaluateQuestion.vue +++ b/user-interface/src/components/EvaluateQuestion.vue @@ -8,6 +8,7 @@ import { useItemStore } from '@/stores/item' import api from "@/services/apiAxios" + import type { AxiosResponse } from "axios"; //const stepStore = useStepStore() const itemStore = useItemStore() @@ -32,7 +33,7 @@ }) async function getQuestions(knowledge: Knowledge): Promise{ - const response = await api.get(`api/v1/knowledges/${knowledge.id}/questions`) + const response: AxiosResponse = await api.get(`api/v1/knowledges/${knowledge.id}/questions`) const questions: Question[] = response.data return questions } diff --git a/user-interface/src/router/index.ts b/user-interface/src/router/index.ts index e11d1bf..0335622 100644 --- a/user-interface/src/router/index.ts +++ b/user-interface/src/router/index.ts @@ -1,5 +1,8 @@ import { createRouter, createWebHistory } from 'vue-router' +import { isAuthenticated } from '@/services/apiAxios' +const pagesWithoutGuard = ['login', 'app'] + const router = createRouter({ history: createWebHistory(import.meta.env.BASE_URL), routes: [ @@ -7,6 +10,12 @@ const router = createRouter({ path: '/', alias: '/app', name: 'app', + component: () => import('@/views/WelcomeView.vue'), + }, + { + path: '/experiment', + alias: '/experiment', + name: 'experiment', component: () => import('@/views/ExperimentView.vue'), }, { @@ -18,4 +27,11 @@ const router = createRouter({ ], }) +router.beforeEach(async (to, from) => { + const isAuth = await isAuthenticated() + if (!isAuth && !pagesWithoutGuard.includes(to.name!.toString())) { + return { name: 'login' } + } +}) + export default router diff --git a/user-interface/src/services/apiAxios.ts b/user-interface/src/services/apiAxios.ts index 41befef..f2eba36 100644 --- a/user-interface/src/services/apiAxios.ts +++ b/user-interface/src/services/apiAxios.ts @@ -1,4 +1,5 @@ import axios from "axios" +import type { AxiosResponse } from "axios"; const api = axios.create({ baseURL: import.meta.env.VITE_API_URL @@ -20,7 +21,21 @@ export const authAPI = { new URLSearchParams({ username, password }), { headers: { 'Content-Type': 'application/x-www-form-urlencoded' }} ), - getMe: () => api.get('/auth/me') + getMe: () => api.get('/api/v1/auth/me') +} + +export const isAuthenticated = async () => { + try { + const response: AxiosResponse = await authAPI.getMe() + if (response.status==200) + return true + else + return false + } + catch{ + return false + } + } export default api; \ No newline at end of file diff --git a/user-interface/src/views/AuthView.vue b/user-interface/src/views/AuthView.vue index ab85492..1dabd36 100644 --- a/user-interface/src/views/AuthView.vue +++ b/user-interface/src/views/AuthView.vue @@ -1,4 +1,5 @@ + + + + \ No newline at end of file