в основном у меня есть следующая функция инициации:
new Vue({
el: "#app",
render: h => h(App),
store,
router,
mounted() {
this.startUp();
},
methods: {
startUp() {
store.dispatch('auth/startUp')
.catch(err => console.log(err));
}
},
});
Проблема в том, что startUp
инициируется после router.beforeEach((to, from, next)
. В пределах beforeEach
каждый мне нужно проверить:
- завершил ли пользователь свою настройку, если ему были доступны не только определенные маршруты. Если пользователь получил доступ к неправильному маршруту, он должен быть перенаправлен на правильный маршрут в соответствии с настройкой.
- в случае доступа пользователя к защищенному пути - перевести пользователя на домашнюю страницу.
Скрипт запуска должен обновить состояние пользователя, если пользователь решит обновить страницу. После загрузки состояние управляется с помощью Vuex.
Я определяю свои маршруты в main.js. store.state.auth.user
пусто, потому что конечная точка запуска заканчивается после router.beforeEach((to, from, next)
.
// configure router
const router = new VueRouter({
routes, // short for routes: routes
linkExactActiveClass: "nav-item active"
});
router.beforeEach((to, from, next) => {
if (store.state.auth.user && store.state.auth.user.setup) {
const user = store.state.auth.user;
var path = to.path !== "/setup" && to.path !== "/logout" ? "/setup" : false;
if (path) {
next({
path: path,
query: {
redirect: to.fullPath
}
});
}
}
});