vue 一直登录错误_vue中路由拦截无限循环的情况

如下图,浏览器报出这个错误

31d7c091e6d331aef8a47efc39b668c0.png

这是因为路由守卫在拦截路由的时候,找不到跳转的地址,引起了无限循环。

在设置路由拦截的时候当指向另一个地址的时候还会触发一次路由拦截,既每次地址栏的变化都会触发一次路由拦截,在没有token值的时候会一直向404跳转,所以会出现无限循环的情况

需要在进行跳转的时候有一个满足跳转条件的来阻止跳转带来的路由拦截


下面是一段完整的路由拦截代码

router.beforeEach ((to,from,next) => {
  //将所有需要登陆才显示的页面的路由都放进一个数组
  const nextRoute = ['index', 'library', 'design', 'administration', 'production'];
  //获取登陆状态
  let isLogin = Global.isLogin
 
  if(to.name === 'login') {  //如果是登录页,则跳过验证
    next()  //必不可少
    return  //以下的代码不执行
  }
  if(nextRoute.indexOf(to.name) >= 0) {  //判断该页面是否需要登陆
    if(!isLogin) {   //判断登陆状态
      next({ name : 'login'})   //如果未登录,则跳转到登录页
    } else {
      next()  //如果已经登陆,那就可以跳转
    }
  } else {  //其他的无需登陆的页面不做验证
      next()
  }
   
})

下面是会引起无限循环的代码:

if(isLogin) {
    next()
  } else {
    next({ name: 'login')}
  }

这样的话就会陷入无限循环

因为你的next({ name: 'login')}是相当于一个路由跳转,它会再次触发全局路由守卫,你又进入了全局路由守卫进行再次判断,如此循环。

所以,想要结束路由守卫,整段代码的逻辑必须由 next() 进行结尾。

if(to.name === 'login') { 
    next() 
    return  
  }

另外,控制路由白名单的代码如下:

const whiteList = ['login', 'forgetPW', 'unlocking', 'Dashboard', 'register'] // no redirect whitelist

//在白名单里的路由不需要验证,直接进入下一个路由
if (whiteList.indexOf(to.name) !== -1) {
      // in the free login whitelist, go directly
      next()
      NProgress.done()
      return
    }

在白名单里的路由添加在constRouter.js中:

// 路由白名单
var constRouters = [
  {
    path: '/login',
    name: '登录页',
    component: LoginView,
  },
  {
    path: '/index',
    name: '首页',
    redirect: '/login'
  },
  {
    path:'/forgetStepOne',
    name:'forgetStepOne',
    component: ()=>import('../views/forgetPassword/ForgetStepOne.vue')
  },
  {
    path:'/forgetStepTwo',
    name:'forgetStepTwo',
    component: ()=>import('../views/forgetPassword/ForgetStepTwo.vue')
  },
  {
    path:'/forgetStepThree',
    name:'forgetStepThree',
    component: ()=>import('../views/forgetPassword/ForgetStepThree.vue')
  }, 
  {
    path:"/browserVersionReminder",
    name:"浏览器版本提醒",
    component: ()=>import('../views/error/BrowserVersionReminder')
  }
]
export default constRouters

待补充

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值