@nvdfxx
Senior Pomidor developer

Как исправить vue-router защиту?

В приложении на некоторых роутах стоит beforeEnter с проверкой на аутентификацию, которая перебрасывает на страницу логина, если юзер не залогинен. Если юзер входит в систему, то все работает отлично, но при перезагрузке страницы все равно перебрасывается на страницу логина. Сталкивался ли кто с этим?
  • Вопрос задан
  • 887 просмотров
Пригласить эксперта
Ответы на вопрос 3
shmatuan
@shmatuan
8 year of Web, 5 years of Vue
{
      path: '/login',
      name: 'Login',
      component: Login,
      meta: { requiresAuth: false }
    },    
//---------------
router.beforeEach((to, from, next) => {
	if(!to.matched[0]){
		router.push({ name: 'Login' });
	}else if(to.meta.requiresAuth){		
			S.currentUser ? next() : router.push({ name: 'Login' })
	}
	}else{
		next();
	}
});
Ответ написан
Комментировать
@2perca
роутер выглядит вот так:
{ path: '/lk', name: 'Lk', component: Lk,  meta: { requiresAuth: true } }

beforeEach вот так:
router.beforeEach((to, from, next) => {
  if (to.matched.some(record => record.meta.requiresAuth)) {
    if (!store.state.account.access) {
      next({ name: 'Signin' })
    } else {
      next()
    }
  } else {
    next()
  }
})

в store.state.account.access true/false, но так же можно обрабатывать и строковые типы (гость/пользователь/админ/etc.)
Ответ написан
Комментировать
@alex_kulkoff
Просто проинициализируй в main.js само приложение после изменения auth:
fb.auth().onAuthStateChanged(user => {
  if (!app) {
    app = new Vue({
      el: '#app',
      store,
      router,
      components: { App },
      template: '<App/>',
      created () {
        if (user) {
        }
      }
    })
  }
})
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы