Я привык к VueJS, но с Vuex я почти ничего не знаю.
По сути, я хочу настроить систему маршрутизатора на основе ролей: JSON, который возвращает мой API, является объектом который содержит массив с ролями пользователя, зачеркнутый так, что я могу разобрать его из Vue.
Я следовал некоторым учебникам, и после некоторых настроек, вот как выглядит мой магазин (соответствующая часть):
getters: {
isLogged: state => !!state.user,
roles: state => JSON.parse(state.user.user.roles) // returns ['authenticated_user', 'admin']
}
Если я протестирую метод получения «ролей» с mapGetter
внутри компонента, у меня не возникнет проблем с получением данных. Тем не менее, я продолжаю отображать state.user is null
как ошибку в моей консоли.
Вот как я пытался его настроить:
const routes = [
...
{
path: '/admin',
name: 'admin',
component: () => import('../admin/Dashboard'),
meta: {
auth: true,
role: 'admin'
}
},
...
];
router.beforeEach((to, from, next) => {
const loggedIn = localStorage.getItem('user');
const role = store.getters.roles;
console.log(store.getters.roles); // state.user is null
if (to.matched.some(record => record.meta.auth) && !loggedIn) {
next('/login');
return;
}
if (loggedIn && to.match.some(record => !roles.includes(record.meta.role)) {
next(from.fullPath);
return;
}
next();
});
Я нашел этот вопрос это ближе всего к моей ситуации, но это не помогло мне, поскольку Vue, кажется, признает state.user
в моем случае.
Чего мне не хватает?
Заранее спасибо