代码之家  ›  专栏  ›  技术社区  ›  Alvin

每个无限循环之前的导航卫士

  •  3
  • Alvin  · 技术社区  · 7 年前

    试图使用导航卫士,但是 next('/auth/login') 给出无限循环:

    router.beforeEach((to, from, next) => {
      auth.validate().then((valid) => {
        if (!valid) {
          next('/auth/login')
        } else {
          next()
        }
      })
    })
    

    路由器定义:

    const router = new Router({
      routes: [
        {
          name: 'login',
          path: '/auth/login',
          component: login
        }
    })
    
    2 回复  |  直到 7 年前
        1
  •  3
  •   samayo    7 年前

    在我看来,当您的身份验证无效时,您的路由器会将您发送到 /auth/login 在那一页上,你再次被发送。我在我的应用程序中处理这个问题的方式有所不同,但通过你的代码,你可以使用 from 路线中的物体。

    你需要一些东西来检查当前路线是否正确 /身份验证/登录 然后忽略不要重定向。

    例子:

     if (!valid && from.path !== '/auth/login') {}
    

    这不会重定向回/auth/login,因为您来自该页面。

        2
  •  0
  •   Isaac    3 年前

    上次我遇到了一个类似的问题。在我的例子中,我有公开的页面和其他需要授权的页面。我添加了一个 isPublic: boolean 属性。 如果是你的话

    (!valid && isPublic === false) ? next({ path: '/auth/login' }) : next();
    

    我希望这有帮助。我也愿意接受纠正。谢谢