const whiteList = ['/login', '/auth-redirect', '/bind', '/register'] router.beforeEach((to, from, next) => { const token = sessionStorage.getItem('access_token') // 存在 token 說明已經登錄 if (token) { // 登錄過就不能訪問登錄界面,需要中斷這一次路由守衛,執行下一次路由守衛,並且下一次守衛的to是主頁' if (to.path === '/login') { next({ path: '/' }) } // 保存在store中路由不為空則放行 (如果執行了刷新操作,則 store 里的路由為空,此時需要重新添加路由) if (store.getters.getRoutes.length || to.name != null) { //放行 next() } else { // 將路由添加到 store 中,用來標記已添加動態路由 store.commit('ADD_ROUTER', '需要添加的路由') router.addRoutes('需要添加的路由') // 如果 addRoutes 並未完成,路由守衛會一層一層的執行執行,直到 addRoutes 完成,找到對應的路由 next({ ...to, replace: true }) } } else { // 未登錄時,注意 :在這里也許你的項目不只有 logon 不需要登錄 ,register 等其他不需要登錄的頁面也需要處理 // if (to.path !== '/logon') { // next({ path: '/logon' }) // } else { // next() // } if (whiteList.indexOf(to.path) !== -1) { // 在免登錄白名單,直接進入 next() } else { next(`/login?redirect=${to.fullPath}`) // 否則全部重定向到登錄頁 NProgress.done() } }
router.afterEach((to, from) => { if(to.meta.checked){ if (to.meta.title) { document.title = to.meta.title } } NProgress.done() })