[vuejs/vue-router]粘贴地址访问,设置验证无效

2024-05-08 618 views
8

根据官方文档,给路由添加

 "/my": {
    component: My,
    auth: true
  },

并且

router.start(app, '#app');

router.beforeEach(function (transition) {
  if (transition.to.auth) {
    getUserInfo().then(function (user) {
      if (!user.id) {
        router.replace("/login")
      }
    });
  } else {
    transition.next()
  }
});

在页面点击链接跳转,会重定向至/login 当直接复制 http://domin.com/my or http://xxx.com/!#/my 时 页面直接渲染,并不会进行验证?

路由配置 var router = new VueRouter({ history: true, //true false 均无效 saveScrollPosition: true //记住页面的滚动位置 html5模式适用 });

相关版本号

   "vue": "^1.0.21",
    "vue-async-data": "^1.0.2",
    "vue-hot-reload-api": "^1.3.2",
    "vue-html-loader": "^1.2.2",
    "vue-loader": "^8.2.2",
    "vue-resource": "^0.7.0",
    "vue-router": "^0.7.13",
    "vue-style-loader": "^1.0.0",
    "vue-validator": "^2.0.1"

回答

7

@fnlctrl
非常感谢 transitionOnLoad: true 在初次加载时是否对 处理场景切换效果。默认情况下,组件在初次加载时会直接渲染。

经测试,仍然不进行验证!只会处理场景切换效果

5

不好意思 我搞错了 transitionOnLoad跟这个问题无关.. 直接访问链接的时候有什么报错吗? 我自己试了一下没能重现这个问题

7

@fnlctrl 没有报错,直接渲染页面,不会跳转! my 是个人中心页 会根据变量 auth 进行判断 用户是否登录 未登录直接跳转到 login 页面! 页面上点击链接可以正常!直接复制粘贴URL打开的时候,不会进行判断!

简单点说 复制粘贴URL访问,并不会 执行 router.beforeEach

9

@ickeep 测了一下知道问题了..router的钩子需要在start()前配置

router.beforeEach(function (transition) {
  if (transition.to.auth) {
    getUserInfo().then(function (user) {
      if (!user.id) {
        router.replace("/login")
      }
    });
  } else {
    transition.next()
  }
});

router.start(app, '#app');
1

@fnlctrl 可以了,非常感谢 其实有尝试过,然后出错!以为必须要router后面。原来是其他声明全局变量的问题!导致出错!

1

@ickeep 那把这issue关了呗...