1. 程式人生 > >Vue 之vue-router router.beforeEach導航守衛,陷入死迴圈

Vue 之vue-router router.beforeEach導航守衛,陷入死迴圈

官方文件 :https://router.vuejs.org/zh/guide/advanced/navigation-guards.html

判斷瀏覽器快取是否有使用者的資訊,沒有的話跳轉登入頁。
看了官方文件,直接這樣寫了。(試了手動清除快取,再從url裡面跳登入頁,直接陷入了死迴圈)

router.beforeEach((to,from,next)=>{
  if(sessionStorage.getItem('loginData')){
    Toast('跳轉成功');
    next();
  }else {
    //沒有登入,去跳轉登入頁
    next({
      path:'/login'
    });
  }
});

網上找了答案,說是next('/login')自己指定路徑的,路由跳轉的時候還執行一遍beforeEach導航鉤子,所以上面出現死迴圈;

再加個判斷就OK了

router.beforeEach((to,from,next)=>{
  // console.log(to);
  // console.log(from);
  if(sessionStorage.getItem('loginData')){
    Toast('跳轉成功');
    next();
  }else {
    //沒有登入,去跳轉登入頁
    if(to.path === '/login'){
      next();
    }else {
      next({
        path:'/login'
      });
    }
  }
});