判断浏览器缓存是否有token信息,没有的话跳转登录页,直接陷入了死循环
NProgress.configure({ showSpinner: false })const whiteList = ['/login','/regist', '/test'] // 不重定向白名单router.beforeEach((to, from, next) => {NProgress.start()if (getToken()) { //是否有tokenif (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中再做处理:判断是否在白名单中,如在白名单中直接放行,不在则重定向到登录页。
