Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么;从“开始”时重定向/“登录”;至/&引用;通过导航防护装置。”;什么时候会出现?_Javascript_Vue.js_Vuejs2_Local Storage_Vue Router - Fatal编程技术网

Javascript 为什么;从“开始”时重定向/“登录”;至/&引用;通过导航防护装置。”;什么时候会出现?

Javascript 为什么;从“开始”时重定向/“登录”;至/&引用;通过导航防护装置。”;什么时候会出现?,javascript,vue.js,vuejs2,local-storage,vue-router,Javascript,Vue.js,Vuejs2,Local Storage,Vue Router,在这里,路由器防护在我的vue应用程序上工作正常,但登录后,控制台上出现以下错误 未捕获(承诺中)错误:通过导航保护从“/登录”转到“/”时重定向 这是我的代码片段 const routes = [ { path: "/login", component: () => import("../views/Auth/Login"), meta: { hideForAuth: true }, }, { path:

在这里,路由器防护在我的vue应用程序上工作正常,但登录后,控制台上出现以下错误

未捕获(承诺中)错误:通过导航保护从“/登录”转到“/”时重定向

这是我的代码片段

const routes = [
  {
    path: "/login",
    component: () => import("../views/Auth/Login"),
    meta: { hideForAuth: true },
  },
  {
    path: "/",
    component: DashboardLayout,
    meta: { requiresAuth: true },
    children: [
      {
        path: "home",
        name: "Home",
        component: () => import("../views/Home"),
      },
    ],
  },
];

授权保护:

const loggedIn = localStorage.getItem("auth");

router.beforeEach((to, from, next) => {
  if (to.matched.some((record) => record.meta.requiresAuth)) {
    if (!loggedIn) {
      next({ path: "/login" });
    } else {
      next();
    }
  } else {
    next();
  }

  if (to.matched.some((record) => record.meta.hideForAuth)) {
    if (loggedIn) {
      next({ path: "//" });
    } else {
      next();
    }
  } else {
    next();
  }
});

我想不出这个问题。提前谢谢

由于
next
没有退出防护,防护将在每条路由上调用
next
至少2次,因为您有两个独立的
if
语句,并且两个语句都将运行

  • /
    路径更改为
    /
  • 调用
    next
    return next
    一样退出函数,或者构造
    if
    语句,以便只运行一个语句
  • 在防护装置内部设置
    loggedIn
    ,否则在创建路由器时,它只会被评估一次
这里有一种方法也包括没有
meta
的路由:

router.beforeach((to,from,next)=>{
const loggedIn=localStorage.getItem(“auth”);
const isAuth=to.matched.some((记录)=>record.meta.requireauth);
const isHide=to.matched.some((record)=>record.meta.hidefrauth);
if(isAuth&!loggedIn){
返回next({path://login});
}else if(isHide&&loggedIn){
返回下一个({path:“/”});
}
next();
});

这并不能解决问题@Dan。控制台中仍然显示相同的错误。事实上,登录后现在需要额外刷新,否则它不会重定向到仪表板(“/”路由)。有什么想法吗?现在我注意到
loggedIn
永远不会改变,因为它需要设置在防护装置内部。查看我的更新。至于这个错误,可能是因为你没有表现出来。你能发布你设置
loggedIn
的方式并进行第一次重定向吗?如果我没有弄错你的问题,我会在本地存储中设置一个项,比如
localStorage.setItem(“auth”,“true”)并在每个路由路径之前检索它。现在,您的更新解决方案运行良好&我最后一个问题是,在注销过程中显示以前的错误。我在logout
this.$router.push({path://login})中执行此操作这里有什么问题@Dan?我不确定,只有这么多事情我可以在看不到的情况下纠正:)在更改路由之前,您是否将auth设置为false?