import Vue from 'vue'; import Router from 'vue-router'; import Home from './views/Home.vue'; import NotFound from './views/NotFound.vue'; import LoginPage from './views/LoginPage.vue'; import Survey from '@/components/Survey.vue'; import NewSurvey from '@/components/NewSurvey.vue'; import Login from '@/components/Login.vue'; import store from '@/store' Vue.use(Router); export const router = new Router({ // export default new Router({ mode: 'history', base: process.env.BASE_URL, routes: [ { path: '/', name: 'home', component: Home, }, { path: '/login', component: LoginPage, }, { path: '/about', name: 'about', // route level code-splitting // this generates a separate chunk (about.[hash].js) for this route // which is lazy-loaded when the route is visited. component: () => import(/* webpackChunkName: "about" */ './views/About.vue'), }, { path: '/surveys/:id', name: 'Survey', component: Survey }, { path: '/surveys', name: 'NewSurvey', component: NewSurvey, beforeEnter (to, from, next) { if (!store.getters.isAuthenticated) { next('/login') } else { next() } } }, { path: '/login', name: 'Login', component: Login }, { path: '*', name: 'notFound', component: NotFound, }, ], }); router.beforeEach((to, from, next) => { // redirect to login page if not logged in and trying to access a restricted page const publicPages = ['/login', '/register']; const authRequired = !publicPages.includes(to.path); const loggedIn = localStorage.getItem('user'); if (authRequired && !loggedIn) { return next('/login'); } }); export default router;