路由导航,一般会搭配权限设置和验证信息
import router from './router'
import NProgress from 'nprogress' // 进度条
import store from '@/store'
import 'nprogress/nprogress.css'
import { getCookieToken, getUserPower } from '@/utils/auth'
import addRouter from '@/router/addPowerRoute'
const whiteList = ['/', '/authredirect', '/stopserver']// 不重定向白名单
router.beforeEach((to, from, next) => {
NProgress.start()
if (!getCookieToken()) {
if (whiteList.indexOf(to.path) !== -1) { // 在免登录白名单,直接进入
next()
} else {
next({ path: '/' }) // 否则全部重定向到登录页
NProgress.done()
}
} else {
// 有token信息
if (getUserPower()) {
// 有权限信息
if (store.getters.addRouters.name) {
// 有正确的路由,直接进入,最终入口
next()
} else {
// 无路由信息,需要去设置路由权限信息
store.dispatch('getRouteList', getUserPower()) // 设置权限
// store.commit('SET_POWERROUTE', getUserPower())
addRouter(store.getters.addRouters)
next({ ...to, replace: true })// 循环
}
} else {
next({ path: '/' }) // 否则全部重定向到登录页
}
}
})
router.afterEach(() => {
NProgress.done()
})
其中包括两重验证:1,cookie中token的时效性;2,权限