#vue.js #vuejs2 #vuex #vue-router
Вопрос:
isLoggedIn в геттерах всегда является истинным событием, если нет токена из API, я все еще могу перейти на все маршруты, я не знаю, в чем ошибка в маршруте охраны, или я неправильно храню токен в состоянии. в этом заявлении не работает, если(!store.getters.isLoggedIn){ перейдите для входа в систему} пожалуйста, помогите мне, я застрял 🙁
в store.js
state:{
Token: localStorage.getItem('access_token') || null,
}
mutations:{
AUTHENTICATION(state,token){
state.Token = token;
},
UNAUTHENTICATION(state,response){
state.Token = response;
}
},
getters:{
isLoggedIn(state){
return state.Token !=null;
}
},
actions:{
loginUser({commit}, formData){
http.post("/login",formData).then((response)=>{
if(response.data.status === 'success'){
const token = response.data.token;
localStorage.setItem('access_token',token);
localStorage.setItem('user',response.data.user);
commit('AUTHENTICATION',token);
router.push({name:'Dashboard'});
router.go();
}else{
commit("LOGIN_ERROR",response.data.message);
}
})
.catch((error)=>{
if(error){
commit('UNAUTHENTICATION',null);
localStorage.removeItem('access_token');
commit("GET_ERRORS",error.response.data.errors);
}
});
});
},
logoutUser({commit}){
http.post("/auth/logout").then((response)=>{
if(response.data.status === "success"){
localStorage.clear();
commit('UNAUTHENTICATION',null);
router.push({name:'Login'});
window.location.reload();
}else{
commit("LOGIN_ERROR",response.data.message);
}
})
.catch((error)=>{
if(error){
commit("GET_ERRORS",error.response.data.errors);
}
});
}
},
в route.js
route.beforeEach((to, from, next) => {
const requiresAuth = to.matched.some(record => record.meta.requiresAuth);
if(requiresAuth){
if(!store.getters.isLoggedIn){
next({name: 'Login'});
}else{
next();
}
}else{
next();
}
});
Комментарии:
1. попробуйте console.log(состояние. Токен) в геттере убедитесь, что данные
2. Маркер все еще там, но он все еще не работает 🙁 как я предполагаю, я застрял почти на неделю.
Ответ №1:
Попробуйте с :
if(!store.getters.isLoggedIn || store.getters.isLoggedIn === '') {
//...
и добытчик :
isLoggedIn: (state) => state.Token,
Комментарии:
1. не работает, когда я console.log(store.getters.isLoggedIn) в route.js он показывает isLoggedIn(состояние){ возвращаемое состояние. Токен !=null; }
2. попробуйте сейчас, пожалуйста, я обновил ответ
3. я пробовал, но это то же самое, я не знаю, как это решить 🙁
Ответ №2:
в то время access_token
как в вашем локальном хранилище нет, затем localStorage.getItem('access_token')
будет возвращено значение undefined
, которое не равно нулю в нестрогой версии not !=
, поэтому ваш получатель всегда будет истинным
, вместо этого вы должны использовать (строгая версия не) или (двойная версия не ):
вариант 1 :
getters:{
isLoggedIn(state){
return state.Token !== null; //double equals
}
}
вариант 2 :
getters:{
isLoggedIn(state){
return !!state.Token; // double !
}
}
Комментарии:
1. не работает 🙁 .
2. результат !store.getters.isLoggedIn всегда возвращает false что это значит?