From 307f0e663ef341c45ccf8f831fe154ec0564226d Mon Sep 17 00:00:00 2001 From: philwing100 Date: Thu, 31 Oct 2024 21:01:40 -0500 Subject: [PATCH] Updates to login and store.js auth --- src/axios.js | 11 +++ .../CalendarComponents/DailyCalendar.vue | 2 +- src/components/Login.vue | 69 +++++---------- src/main.js | 3 + src/router/accountRoutes.js | 16 ++++ src/router/authRoutes.js | 15 ++++ src/router/dashboardRoutes.js | 9 ++ src/router/generalRoutes.js | 22 +++++ src/router/index.js | 85 +++++++------------ src/store.js | 17 ++-- src/views/Login.vue | 22 ----- vue.config.js | 1 - 12 files changed, 140 insertions(+), 132 deletions(-) create mode 100644 src/axios.js create mode 100644 src/router/accountRoutes.js create mode 100644 src/router/authRoutes.js create mode 100644 src/router/dashboardRoutes.js create mode 100644 src/router/generalRoutes.js diff --git a/src/axios.js b/src/axios.js new file mode 100644 index 0000000..b351930 --- /dev/null +++ b/src/axios.js @@ -0,0 +1,11 @@ +// axios.js +import axios from 'axios'; + +const baseURL = 'http://localhost:3000/api'; // Define the base URL here + +const instance = axios.create({ + baseURL, // Use the base URL here + withCredentials: true, // Include credentials with requests +}); + +export { instance, baseURL }; // Export both the instance and base URL diff --git a/src/components/CalendarComponents/DailyCalendar.vue b/src/components/CalendarComponents/DailyCalendar.vue index e2cf8d2..153db73 100644 --- a/src/components/CalendarComponents/DailyCalendar.vue +++ b/src/components/CalendarComponents/DailyCalendar.vue @@ -174,7 +174,7 @@ export default { text-overflow: ellipsis; } -.event:hover { +.event:hover { background-color: #388e3c; } diff --git a/src/components/Login.vue b/src/components/Login.vue index 84680d6..1ef1a99 100644 --- a/src/components/Login.vue +++ b/src/components/Login.vue @@ -1,76 +1,51 @@ - diff --git a/src/main.js b/src/main.js index fa49126..77c1e76 100644 --- a/src/main.js +++ b/src/main.js @@ -2,6 +2,9 @@ import { createApp } from 'vue'; import App from './App.vue'; import store from './store'; // Ensure the correct path import router from './router'; // Assuming you have a router +import axios from 'axios'; + +axios.defaults.withCredentials = true; const app = createApp(App); diff --git a/src/router/accountRoutes.js b/src/router/accountRoutes.js new file mode 100644 index 0000000..171a070 --- /dev/null +++ b/src/router/accountRoutes.js @@ -0,0 +1,16 @@ +// src/router/routes/accountRoutes.js +import Login from '@/views/Login.vue'; +import SignUp from '@/views/SignUp.vue'; + +export default [ + { + path: '/login', + name: 'Login', + component: Login, + }, + { + path: '/signup', + name: 'SignUp', + component: SignUp, + }, +]; diff --git a/src/router/authRoutes.js b/src/router/authRoutes.js new file mode 100644 index 0000000..624ddf8 --- /dev/null +++ b/src/router/authRoutes.js @@ -0,0 +1,15 @@ +import Login from '../views/Login.vue'; +import SignUp from '../views/SignUp.vue'; + +export default [ + { + path: '/login', + name: 'Login', + component: Login, + }, + { + path: '/signup', + name: 'SignUp', + component: SignUp, + }, +]; diff --git a/src/router/dashboardRoutes.js b/src/router/dashboardRoutes.js new file mode 100644 index 0000000..13c14ba --- /dev/null +++ b/src/router/dashboardRoutes.js @@ -0,0 +1,9 @@ +import DashboardWorld from '../views/Dashboard.vue'; + +export default [ + { + path: '/', + name: 'dashboard', + component: DashboardWorld, + }, +]; diff --git a/src/router/generalRoutes.js b/src/router/generalRoutes.js new file mode 100644 index 0000000..c568a1c --- /dev/null +++ b/src/router/generalRoutes.js @@ -0,0 +1,22 @@ +// src/router/routes/generalRoutes.js +import AboutMe from '@/views/AboutMe.vue'; +import Learn from '@/views/Learn.vue'; +import Type from '@/views/Type.vue'; + +export default [ + { + path: '/about-me', + name: 'AboutMe', + component: AboutMe + }, + { + path: '/learn', + name: 'Learn', + component: Learn + }, + { + path: '/type', + name: 'Type', + component: Type + } +]; diff --git a/src/router/index.js b/src/router/index.js index 1026f7e..e756e86 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -1,59 +1,38 @@ -import { createRouter, createWebHistory } from 'vue-router' -import DashboardWorld from '../views/Dashboard.vue' -import ListsWorld from '../views/Lists.vue' -import SettingsWorld from '../views/Settings.vue' -import AboutMe from '../views/AboutMe.vue' -import Learn from '../views/Learn.vue' -import Type from '../views/Type.vue' -import Login from '../views/Login.vue' -import SignUp from '../views/SignUp.vue' +// src/router/index.js +import { createRouter, createWebHistory } from 'vue-router'; +import store from '@/store'; // Vuex store for authentication state +// Import route groups +import dashboardRoutes from './dashboardRoutes'; +import accountRoutes from './accountRoutes'; +import generalRoutes from './generalRoutes'; + +// Combine routes const routes = [ - { - path: '/', - name: 'dashboard', - component: DashboardWorld - }, - { - path: '/Lists', - name: 'Lists', - component: ListsWorld - }, - { - path: '/Settings', - name: 'Settings', - component: SettingsWorld - }, - { - path: '/About-me', - name: 'About Me', - component: AboutMe - }, - { - path: '/Learn', - name: 'Learn', - component: Learn - }, - { - path: '/Type', - name: 'Type', - component: Type - }, - { - path: '/Login', - name: 'Login', - component: Login - }, - { - path: '/SignUp', - name: 'SignUp', - component: SignUp - }, -] + ...dashboardRoutes, + ...accountRoutes, + ...generalRoutes +]; const router = createRouter({ history: createWebHistory(process.env.BASE_URL), - routes -}) + routes, +}); + +// Navigation guard for protected routes +router.beforeEach((to, from, next) => { + const isAuthenticated = store.state.isAuthenticated; // Get auth status from Vuex + + if (to.matched.some(record => record.meta.requiresAuth)) { + // Route requires auth and user is not authenticated + if (!isAuthenticated) { + next({ name: 'Login' }); // Redirect to login page + } else { + next(); // Proceed to route + } + } else { + next(); // Proceed to route + } +}); -export default router +export default router; diff --git a/src/store.js b/src/store.js index fceca52..52010da 100644 --- a/src/store.js +++ b/src/store.js @@ -1,5 +1,5 @@ import { createStore } from 'vuex'; -import axios from 'axios'; +import axios from './axios'; // Make sure to import your axios instance const store = createStore({ state: { @@ -18,16 +18,17 @@ const store = createStore({ }, actions: { async checkAuth({ commit }) { + console.log("checking auth"); try { - const response = await axios.get('http://localhost:3000/api/check-auth'); - commit('SET_USER', response.data.user); + const response = await axios.get('/check-auth', { withCredentials: true }); + commit('SET_USER', response.data.user); // Set user data from response } catch (error) { - commit('LOGOUT'); + commit('LOGOUT'); // If error occurs, user is not authenticated } }, - async login({ commit }, credentials) {//!1Abcdefgh + async login({ commit }, credentials) { try { - await axios.post('http://localhost:3000/api/login', credentials); + await axios.post('/login', credentials, { withCredentials: true }); await this.dispatch('checkAuth'); // Re-check auth status after login } catch (error) { console.error('Login error:', error); @@ -35,8 +36,8 @@ const store = createStore({ }, async logout({ commit }) { try { - await axios.post('http://localhost:3000/api/logout'); - commit('LOGOUT'); + await axios.post('/logout', {}, { withCredentials: true }); + commit('LOGOUT'); // Commit mutation to log the user out } catch (error) { console.error('Logout error:', error); } diff --git a/src/views/Login.vue b/src/views/Login.vue index a8a89fc..e1cc22d 100644 --- a/src/views/Login.vue +++ b/src/views/Login.vue @@ -1,15 +1,9 @@ diff --git a/vue.config.js b/vue.config.js index cbd18ad..24eb324 100644 --- a/vue.config.js +++ b/vue.config.js @@ -12,6 +12,5 @@ module.exports = defineConfig({ }, }); -//For some reason this stuff doesn't work and I don't know why but its very goofy. All api calls need to be to the exact link