user: { // default user state
id: 1,
email: "null",
name: "null",
},
},
getters: {
getUserId(state) {
return state.user.id;
},
getUserEmail(state) {
return state.user.email;
},
getUserName(state) {
return state.user.name;
},
},
mutations: {
setUser(state, user) {
state.user = user;
},
},
actions: {
fetchUser({ commit }) {
api
.get("api/user/profile")
.then((response) => {
console.log(response.data);
commit("setUser", response.data); // <- работает, а вот JSON.parse(response.data) - нет
})
.catch((err) => {
console.log(err);
});
},
},
Вопросы:
1. После успешной авторизации backend в ответ кидает json, который содержит информацию о пользователе:
{
"id": 1,
"email": "admin@test.ru",
"name": "ADMIN",
"roles": [
{
"id": 1,
"name": "ROLE_USER",
"description": "User role",
"authority": "ROLE_USER"
},
{
"id": 2,
"name": "ROLE_ADMIN",
"description": "Admin role",
"authority": "ROLE_ADMIN"
}
]
}
Я пытаюсь её спарсить JSON.parse и присвоить состоянию в действии fetchUser, но получаю ошибку.
SyntaxError: "[object Object]" is not valid JSON
at JSON.parse (<anonymous>)
at eval (userModule.js:35:1)
Но если я не буду этого делать(не буду вручную парсить, то всё работает как надо), почему так?
2. Как правильно занулить состояние user, например при logout?
При попытке это сделать так:
async logout() {
this.setUser(null);
//todo: redirect to home page?
await logout(); // call api backend
},
после выполнении кода выше и попытки перейти на страницу профиля я получаю ошибку:
Cannot read properties of null (reading 'name')
TypeError: Cannot read properties of null (reading 'name')
at getUserName
ну как я понял пользователь занулился с концами. Как в таком случае его правильно занулять?
===============
UPD: Точнее как правильно пользователя занулять и понимать, что нельзя пускать его на определённую страницу раз он не авторизован?
ты хочешь, чтобы фронт знал, авторизован пользователь или нет, без опроса бека?
честно говоря не знаю как правильно в данной ситуации сделать, по идее да, если в состоянии есть пользователь то хотя бы так считать что пользователь авторизован
у тебя уже там объект, а не json-строка
Обсуждают сегодня