Vuejs роутер и beforeEach - PullRequest
       17

Vuejs роутер и beforeEach

0 голосов
/ 20 марта 2019

Я столкнулся с проблемой с перехватчиком beforeEach для vue-router: я проверил аутентификацию пользователя с перехватчиком router.beforeEach в моем файле main.js следующим образом:

router.beforeEach((to, from, next) => {
  if (to.name !== 'Login' && to.name !== 'PasswordReset' && to.name !== 'ForgetPass' && to.name !== 'SsoLogin') {
    Auth.isLogged()
      .then(() => {
        next();
      })
      .catch(() => {
        next(`/login?redirectUrl=${to.fullPath}`);
      });
  }
  next();
});

Проблема заключается в том, чточто веб-страница отображается за 1 секунду до того, как произойдет перенаправление.Я попытался поместить код выше перед Vue.use (Router), как я видел в Интернете, но он ничего не исправил.Я могу исправить это, используя beforeEnter () на каждом маршруте, но я хочу использовать глобальное решение вместо того, чтобы умножать код на каждом маршруте.

Можете ли вы помочь мне?

1 Ответ

1 голос
/ 20 марта 2019
router.beforeEach((to, from, next) => {
  if(...) {
    Auth.isLogged().then().catch();
  } else {
    next()
  }
}

Вам необходимо добавить еще, так как Auth.isLogged () является асинхронным.Если вы не добавите else, последний next () всегда будет выполнен.Итак, сначала вы увидите страницу (last next() been executed), а затем перенаправление страницы (code in then() or catch() block been executed).

...