Vuejs Маршрутизаторы защиты для перехватчика beforeEach выдает ошибку превышения максимального значения - PullRequest
0 голосов
/ 21 февраля 2020

в этом firebase - VueJS приложении, которое я создаю, я также пытаюсь установить базовые c правила безопасности для серфинга на нем, используя средства защиты маршрутизатора. В моем main. js я поместил этот код, ссылаясь на разрешение или не настроившись на ситуацию аутентификации пользователя, но выдает мне этот 'vue -router.esm. js? Xxx RangeError: Превышен максимальный размер стека вызовов' :

router.beforeEach( (to, from, next) => {
      if(store.getters.getUser == null || store.getters.getUser == undefined ){
        next('/welcome',)
      }
        else return  next()
    }
);

также в качестве альтернативы я попытался использовать ловушку beforeEnter на моем маршрутизаторе. js файл на каждом пути, но, несмотря на работу, в любое время я перезагружаю страницу по любой причине мне на целевой странице входа (приветствия) с пользователем явно уже залогинен, вот код:

import store from '../store/index'


Vue.use(VueRouter)

const routes = [
  { 
    path: '/',
    name: 'home',
    component: Home,
    beforeEnter:(to, from, next) => {
      if (store.getters.getUser == null || store.getters.getUser == undefined ){
        next('/welcome',)
      }
        else return  next()
    }
  },
   path: '/chat',
    name: 'chat',
    component: Chat,
    beforeEnter:(to, from, next) => {
      if(store.getters.getUser == null || store.getters.getUser == undefined ){
        next('/welcome',)
      }
        else return  next()
    }
  }...etc...
  ]

1 Ответ

0 голосов
/ 21 февраля 2020

думаю, нужно было жестко закодировать принудительный выход к этому, но не так обычно или динамично c, потому что только это поставило бы меня на определенную страницу c, независимо от того, где находятся другие ссылки к тому моменту, когда я мог бы быть в ... просто сохранил beforeEnter в моем файле роутера. js, а затем на целевой странице, чтобы не прошедшие проверку пользователи установили наблюдателя в противоположное состояние, нажимая прямо на домашнюю страницу, но смысл в том, чтобы быть на другом если бы я перезаряжал домашнюю страницу, если бы я перезарядил ее, я бы снова переместился на домашнюю страницу .... Некоторое время я боролся с beforeEach, но ни одно из возможных решений в сети не было успешным. Вот что я сделал:

router.js file


import store from '../store/index'



Vue.use(VueRouter)

const routes = [
  { 
    path: '/',
    name: 'home',
    component: Home,
    beforeEnter:((to, from, next)=>{
      if(store.getters.getUser == null || store.getters.getUser == undefined ){
        next ('/welcome',)
      }
        else next ()
    })
  },
  {
    path: '/about',
    name: 'about',
    component:About,
  },
  {
    path: '/chat',
    name: 'ChatRoom',
    component:ChatRoom,
    beforeEnter:((to, from, next) => {
      if(store.getters.getUser == null || store.getters.getUser == undefined ){
        next ('/welcome',)
      }
        else next()
    })
  },
  {
    path: '/results/:idItemSelected',
    name: 'SearchResults',
    component:SearchResults,
    props:true,
    beforeEnter:((to, from, next) => {
      if(store.getters.getUser == null || store.getters.getUser == undefined ){
        next ('/welcome',)
      }
        else next()
    })

  },
  {
    path: '/welcome',
    name: 'WelcomingPage',
    component:WelcomingPage,

  },
]

и затем в моем представлении WelcomingPage установите это:

computed: {
    ...mapGetters(["getUser"]),

user(){ 
  return this.$store.getters.getUser

}

watch:{
    user(value) {
      if(value != null||value != undefined){
          this.$router.push('/')
      }
      else{
        return this
      }
    },

Это работает в середине, но все еще не совсем правильно, поэтому, пожалуйста, если у кого-то есть то же самое вопрос и уже нашел практическое решение, лучше, чем это, я был бы признателен за любую помощь. Заранее спасибо

...