Vuejs Router Guard работает неожиданно - PullRequest
0 голосов
/ 10 ноября 2018

У меня есть маршрутизатор, который работает с ошибками и не может понять, как это исправить.

Это глобальный маршрутизатор, который должен проверять срок действия токена jwt и обрабатывать маршрутизацию. Все работало нормально до добавления некоторых функций, таких как isActivated account. Поэтому теперь мне нужно проверить, есть ли у пользователя токен и активирована ли учетная запись пользователя.

1) Если у пользователя есть токен, он должен сделать next (), иначе next ("/ login") (redirect)

2) Если у пользователя есть токен, но его учетная запись еще не активирована (первый вход в систему), он должен перенаправиться на страницу настройки далее ("/ setup"), пока он не предоставит некоторую информацию.

Так что это моя охрана

router.beforeEach((to, from, next) => {
  const token = localStorage.getItem("token");
  const tokenExp = parseInt(localStorage.getItem("tokenExp"))
  const isActivated = localStorage.getItem("isActivated")
  const now = new Date().getTime() + 129600000

  const requiresAuth = to.matched.some(record => record.meta.requiresAuth);

  console.log("first")

  if (requiresAuth && !token) {
    next('/login');
  } else if (requiresAuth && token) {

    if (now > tokenExp) {
      axios.post("/user/t/r", token)
        .then(e => {
          const token = e.headers['authorization'].replace("Bearer ", "");

          localStorage.setItem("token", token);
          localStorage.setItem("tokenExp", (new Date().getTime() + 172800000).toString())

          if (isActivated === 'true') {
            next()
          } else {
            next("/setup")
          }
        })
        .catch(e => {
          localStorage.removeItem("token")
          localStorage.removeItem("tokenExp")
          localStorage.removeItem("fullName")
          localStorage.removeItem("role")
          next('/login')
        })
    } else {
      console.log("second")
      if (isActivated === 'true') {
        console.log("third")
        next();
      } else {
        console.log("fourth")
        next("/setup")
      }

    }
  } else {
    next();
  }
})

А это мой console.log с ошибкой при входе в систему:

enter image description here

1 Ответ

0 голосов
/ 10 ноября 2018

Вы бесконечно перенаправляете в / setup, при первом запуске вы нажимаете «четвертый», затем отправляете пользователя в / setup, где перед повторным вызовом запускается ваш бесконечный цикл.

Вам нужно прекратить звонить следующим ('/ setup') или следующим ('/ login'), если пользователь уже находится на этой странице.

Вам необходимо использовать router.currentRoute, чтобы убедиться, что вы не собираетесь перенаправлять на страницу, на которой они уже есть.

https://router.vuejs.org/api/#router-currentroute

...