Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.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
Vue.js 如何同时保护'/登录';或'/登录/';,和'/仪表板';或'/仪表板/';嵌入式路由器_Vue.js_Vue Router - Fatal编程技术网

Vue.js 如何同时保护'/登录';或'/登录/';,和'/仪表板';或'/仪表板/';嵌入式路由器

Vue.js 如何同时保护'/登录';或'/登录/';,和'/仪表板';或'/仪表板/';嵌入式路由器,vue.js,vue-router,Vue.js,Vue Router,我正在使用vue router在我的系统中设置routeguard,如果用户试图在URL中输入/登录或/登录,如果有令牌,则将用户重定向回仪表板,如果用户没有令牌,则将用户重定向回仪表板 router.js router.beforeEach((to, from, next) => { if (to.fullPath === '/dashboard/') { if (!store.state.authToken) { next('/login'); }

我正在使用vue router在我的系统中设置routeguard,如果用户试图在URL中输入/登录或/登录,如果有令牌,则将用户重定向回仪表板,如果用户没有令牌,则将用户重定向回仪表板

router.js

router.beforeEach((to, from, next) => {
  if (to.fullPath === '/dashboard/') {
    if (!store.state.authToken) {
      next('/login');
    }
  }
  if (to.fullPath === '/login/') {
    if (store.state.accessToken) {
      next('/dashboard');
    }
  }
  next();
});
我的问题是,如果我键入“/login”或“/dashboard”(最后没有反斜杠),它会绕过我的防护,因此我尝试在我的代码中执行
(to.fullPath=='/login/'| |'/login')
(to.fullPath=='/dashboard/'| |'/dashboard')
,这在4小时前就取得了成功

然后我现在返回,它现在给了我错误,每当我通过URL更改视图时,都会在路线导航期间说
[vue router]未捕获错误

我不知道它为什么停止工作,请帮忙

谢谢大家!


编辑:我输入了一个错误,调用的是accessToken而不是authToken,这就是守卫失败的原因。修好了,谢谢

只需使用
startsWith
而不是
=
进行比较:

if (to.fullPath.startsWith('/dashboard') {...

这样,您就不用担心后面的斜杠等了。

您可以为路由指定一个名称,然后根据该名称重定向

一个额外的改变可能是在路由中添加一些元,不管路由是否需要对用户进行身份验证,这使得扩展更容易,而不必在beforeach中指定每个受保护的路由

路线

{
  path: '/login',
  name: 'login',
  component: () => import('./views/Login.vue'),
  meta: { requiresAuth: false }
},
{
  path: '/dashboard',
  name: 'dashboard',
  component: () => import('./views/Dasboard.vue'),
  meta: { requiresAuth: true }
}
卫兵

router.beforeach((to,from,next)=>{
/*“/login”和“/login/”应该共享相同的路由名称,即使它们的路径不同*/
如果(to.name=='login'){
if(store.state.accessToken){
下一步('/dashboard');
}
}
//如果路由需要身份验证且未设置令牌,则重定向到登录
if(to.meta.requireAuth){
如果(!store.state.accessToken){
下一步('/login');
}
}
next();
});

这解决了我的问题,谢谢。不过现在,每当我在URL中推/登录时,即使有令牌,它也不会重定向回/dashboard