3

当我router.push('/')用作注销的最后一步时,我遇到了问题。

/ redirect如果我从与s相同的路由触发注销过程,router.beforeEach则不会触发,因此不会将用户重定向到,/login但仍显示应该只对登录用户可见的路由(用户不再是在注销过程结束时)。

{
  path: '/',
  redirect: 'foo'
},
{
  path: '/foo',
  name: 'foo',
  component: Foo,
  meta: {
    requiresAuth: true
  }
},

router.beforeEach((to, from, next) => {
  ...
  if(to.requiresAuth && userLoggedIn == false) 
    next('/login')
  ...

因此,如果我从除预期之外的任何路由触发注销,/foo但如果我从/foo用户触发它,则不会重定向到/login.

我想这可能是使路由尽可能高效的预期行为,但在这种情况下,这绝对不是我想要的。

我如何确保我的beforeEach路线守卫将在每一个上进行评估router.push/replace

4

2 回答 2

2

router.beforeEach守卫似乎只有在检测到导航变化时才会运行。由于您的路线是相同的,因此您必须通过在您的预期路线之前推送不同的路线路径来强制更改导航。预先推动一个空白空间效果很好。这无疑是 hacky。

例如:

<button @click="$router.push(' '); $router.push('/')">Logout</button>

演示

于 2018-10-07T13:55:31.413 回答
1

创建一个/logout重定向到该路由的/路由。

奖励:显示一条带有“成功注销”的好消息,并在几秒钟后重定向。

于 2018-10-07T16:05:11.750 回答