判断浏览器缓存是否有token信息,没有的话跳转登录页,直接陷入了死循环
NProgress.configure({ showSpinner: false })
const whiteList = ['/login','/regist', '/test'] // 不重定向白名单
router.beforeEach((to, from, next) => {
NProgress.start()
if (getToken()) { //是否有token
if (to.path === '/login' || to.path=='/regist'|| to.path == '/test') {
next()
NProgress.done()
} else {
//此处可作拦截处理其它
next()
NProgress.done() // 结束Progress
}
} else {
next(`/login?redirect=${to.path}`) // 否则全部重定向到登录页
}
})
router.afterEach(() => {
NProgress.done() // 结束Progress
})
原因是由于 next(/login?redirect=${to.path}
)是自己指定路径的,中断跳转,再路由跳转的时候还执行一遍beforeEach导航钩子,所以上面出现死循环;
再加个判断就OK了
NProgress.configure({ showSpinner: false })
const whiteList = ['/login','/regist', '/test'] // 不重定向白名单
router.beforeEach((to, from, next) => {
// next()
NProgress.start()
if (getToken()) {
if (to.path === '/login' || to.path=='/regist'|| to.path == '/test') {
next()
NProgress.done()
} else {
//此处可作拦截处理其它
next()
NProgress.done()
}
} else {
if (whiteList.indexOf(to.path) !== -1) {
next()
} else {
next(`/login?redirect=${to.path}`) // 否则全部重定向到登录页
NProgress.done()
}
}
})
router.afterEach(() => {
NProgress.done() // 结束Progress
})
因为一开始在else里面没有做判断,那么他的条件一直未改变,所以他会一直重复next到login才造成的死循环,后面写了判断之后就正常了
正确思路应该是:
判断是否token有效,如果无token,进入else,在else中再做处理:判断是否在白名单中,如在白名单中直接放行,不在则重定向到登录页。