vue -router.esm. js? 8c4f: 2181 Ошибка типа: невозможно прочитать свойство loggedIn из неопределенного - PullRequest
0 голосов
/ 02 августа 2020
• 1000 : Невозможно прочитать свойство 'loggedIn' неопределенного в guardMyroute.

это мой индекс. js файл в папку маршрутов:

import Vue from "vue";
import Router from "vue-router";
import Login from "../components/Login";
import Dashboard from "../components/Dashboard";
import store from '../store'

Vue.use(Router);

function guardMyroute(to, from, next) {
  var isAuthenticated = false;
  if (store.user.loggedIn) isAuthenticated = true;
  else isAuthenticated = false;
  if (isAuthenticated) {
    next(); // allow to enter route
  } else {
    next("/login"); // go to '/login';
  }
}

const router = new Router({
  mode: "history",
  base: process.env.BASE_URL,
  routes: [
    {
      path: "/login",
      name: "login",
      component: Login,
      meta: {title: 'Login'}
    },
    {
      path: "/dashboard",
      name: "dashboard",
      beforeEnter : guardMyroute,
      meta: {title: 'Dashboard'},
      component: Dashboard,
    }
  ],
});

export default router;

и это store. js файл:

import Vue from "vue";
import Vuex from "vuex";
Vue.use(Vuex);
export default new Vuex.Store({
  state: {
    user: {
      loggedIn: false,
      data: null
    }
  },
  getters: {
    user(state){
      return state.user
    }
  },
  mutations: {
    SET_LOGGED_IN(state, value) {
      state.user.loggedIn = value;
    },
    SET_USER(state, data) {
      state.user.data = data;
    }
  },
  actions: {
    fetchUser({ commit }, user) {
      commit("SET_LOGGED_IN", user !== null);
      if (user) {
        commit("SET_USER", {
          displayName: user.displayName,
          email: user.email
        });
      } else {
        commit("SET_USER", null);
      }
    }
  }
});

Можете ли вы выяснить, в чем проблема, которая вызывает ошибку loggedIn undefined и не видит страницу панели управления?

1 Ответ

0 голосов
/ 02 августа 2020

изменил функцию на:

    function guardMyroute(to, from, next) {
   if (store.getters.user.loggedIn) {
    next(); // allow to enter route
  } else {
    next("/login"); // go to '/login';
  }
}

и в основном. js изменил код на:

 firebase.auth().onAuthStateChanged((user) => {
  store.dispatch("fetchUser", user);
  new Vue({
    router,
    store,
    render: (h) => h(App),
  }).$mount("#app");
});
...