32 lines
1.0 KiB
TypeScript
32 lines
1.0 KiB
TypeScript
// src/router/index.ts
|
|
import { createRouter, createWebHashHistory, createWebHistory } from 'vue-router';
|
|
import routes from './routes';
|
|
import { useAuthStore } from '../stores/auth';
|
|
|
|
const history = import.meta.env.VITE_ROUTER_MODE === 'history'
|
|
? createWebHistory(import.meta.env.BASE_URL)
|
|
: createWebHashHistory(import.meta.env.BASE_URL);
|
|
|
|
const router = createRouter({
|
|
history,
|
|
routes,
|
|
scrollBehavior: () => ({ left: 0, top: 0 }),
|
|
});
|
|
|
|
router.beforeEach(async (to, from, next) => {
|
|
// Auth guard logic
|
|
const authStore = useAuthStore();
|
|
const isAuthenticated = authStore.isAuthenticated;
|
|
const publicRoutes = ['/auth/login', '/auth/signup']; // Fixed public routes paths
|
|
const requiresAuth = !publicRoutes.includes(to.path);
|
|
|
|
if (requiresAuth && !isAuthenticated) {
|
|
next({ path: '/auth/login', query: { redirect: to.fullPath } }); // Fixed login path with leading slash
|
|
} else if (!requiresAuth && isAuthenticated) {
|
|
next({ path: '/' });
|
|
} else {
|
|
next();
|
|
}
|
|
});
|
|
|
|
export default router; |