Доступ к аутентифицированному маршруту с помощью vue-router - PullRequest
0 голосов
/ 16 мая 2018

Я боролся с ошибкой, которая иногда возникает в моем приложении VueJs2.

После того, как я вошел в систему, и я аутентифицировался в моем приложении, а данные сохранены в Vuex, я не могу получить доступ к аутентифицированному маршруту при нажатии нассылка.

Проблема связана с маршрутом «профиль», который находится на моей панели навигации при входе в систему. Если я обновляю браузер, он работает и я могу нажать на ссылку и просмотреть компонент.Проблема в beforeEach, и он не может аутентифицировать Vuex как true.

Это моя текущая настройка маршрутизатора.

import Vue from 'vue'
import VueRouter from 'vue-router'
import { store } from '../store/index'

import SiteIndex from '@/components/home/Index.vue'
import AuctionIndex from '@/components/auction/Index.vue'
import ViewVehicle from '@/components/vehicle/View.vue'
import Login from '@/components/authentication/Login.vue'
import Register from '@/components/registration/Register.vue'
import ForgotPassword from '@/components/authentication/Forgot.vue'
import Cart from '@/components/cart/Index.vue'

import UserProfile from '@/components/user/Profile.vue'
import AboutUs from '@/components/site/About.vue'
import Faq from '@/components/site/Faq.vue'
import HowItWorks from '@/components/site/HowItWorks.vue'
import ContactUs from '@/components/site/ContactUs.vue'
import Terms from '@/components/site/Terms.vue'

import Error404 from '@/components/site/Error404.vue'

Vue.use(VueRouter)

const router = new VueRouter({
  routes: [
    { path: '/', redirect: '/index' },
    { path: '/logout', redirect: '/login' },
    {
        path: '/index',
        name: 'home',
        component: SiteIndex,
        meta: {
            breadcrumb: 'Home',
            displayBreadCrumb:false
        }
    },
    {
        path: '/auction',
        name: 'auction',
        component: AuctionIndex,
        meta: {
            breadcrumb: {
                label: 'Auction',
                parent: 'home'
            },
            displayBreadCrumb:true
        }
    },
    {
        path: '/auction/:slug/:vehicle_id',
        component: ViewVehicle,
        meta: {
            displayBreadCrumb:true
        }
    },
    {
        path: '/cart',
        component: Cart,
        meta: {
            requiresAuth: true,
            breadcrumb: {
                label: 'Basket',
                parent: 'home'
            },
            displayBreadCrumb:true
        }
    },
    {
        path: '/login',
        component: Login,
        meta: {
            breadcrumb: {
                label: 'Login',
                parent: 'home'
            },
            displayBreadCrumb:true
        }
    },
    {
        path: '/register',
        component: Register,
        meta: {
            breadcrumb: {
                label: 'Register',
                parent: 'home'
            },
            displayBreadCrumb:true
        }
    },
    {
        path: '/forgot',
        component: ForgotPassword,
        meta: {
            breadcrumb: {
                label: 'Forgot Password',
                parent: 'home'
            },
            displayBreadCrumb:true
        }
    },
    {
        path: '/profile',
        component: UserProfile,
        meta: {
            requiresAuth: true,
            breadcrumb: {
                label: 'My Profile',
                parent: 'home'
            },
            displayBreadCrumb:true
        }
    },
    {
        path: '/terms',
        component: Terms,
        meta: {
            breadcrumb: {
                label: 'Terms and conditions',
                parent: 'home'
            },
            displayBreadCrumb:true
        }
    },
    {
        path: '/howitworks',
        component: HowItWorks,
        meta: {
            breadcrumb: {
                label: 'How it works',
                parent: 'home'
            },
            displayBreadCrumb:true
        }
    },
    {
        path: '/faq',
        component: Faq,
        meta: {
            breadcrumb: {
                label: 'Frequently asked questions',
                parent: 'home'
            },
            displayBreadCrumb:true
        }
    },
    {
        path: '/about',
        component: AboutUs,
        meta: {
            breadcrumb: {
                label: 'About us',
                parent: 'home'
            },
            displayBreadCrumb:true
        }
    },
    {
        path: '/contactus',
        component: ContactUs,
        meta: {
            breadcrumb: {
                label: 'Contact us',
                parent: 'home'
            },
            displayBreadCrumb:true
        }
    },
    {
        path: '*',
        component: Error404
    }
  ],
  linkActiveClass: 'active',
  mode: 'history'
})
router.beforeEach((to, from, next) => {
  const requiresAuth = to.matched.some(record => record.meta.requiresAuth);

  if(requiresAuth && !store.getters.isLoggedIn) {
    next('/login');
  } else {
    next();
  }
})

export default router
...