Open ...\src\routes\index.ts You will find the below example code. In the below code, we have shown four different routes. MainRoutes is the main layout routing you see after login.
// routes\index.ts
import { createRouter, createWebHistory } from 'vue-router';
import MainRoutes from './MainRoutes';
import PublicRoutes from './PublicRoutes';
import ComponentRoutes from './ComponentRoutes';
import { useAuthStore } from '@/stores/auth';
export const router = createRouter({
history: createWebHistory(import.meta.env.BASE_URL),
routes: [
{
path: '/:pathMatch(.*)*',
component: () => import('@/views/pages/maintenance/error/Error404Page.vue')
},
PublicRoutes,
MainRoutes,
ComponentRoutes
]
});
router.beforeEach(async (to, from, next) => {
// redirect to login page if not logged in and trying to access a restricted page
const publicPages = ['/'];
const auth: AuthStore = useAuthStore();
const isPublicPage = publicPages.includes(to.path);
const authRequired = !isPublicPage && to.matched.some((record) => record.meta.requiresAuth);
// User not logged in and trying to access a restricted page
if (authRequired && !auth.user) {
auth.returnUrl = to.fullPath; // Save the intended page
next('/login');
} else if (auth.user && to.path === '/login') {
// User logged in and trying to access the login page
next({
query: {
...to.query,
redirect: auth.returnUrl !== '/' ? to.fullPath : undefined
}
});
} else {
// All other scenarios, either public page or authorized access
next();
}
});