【发布时间】:2021-11-16 17:15:23
【问题描述】:
如果没有来自 API 的令牌,getter 中的 isLoggedIn 始终是 true 事件,我仍然可以转到每条路由,但我不知道保护路由中的错误是什么,或者我在状态中存储了错误的令牌。在此语句中不起作用 if(!store.getters.isLoggedIn){ go to login} 请帮助我,我被卡住了:(
在 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();
}
});
【问题讨论】:
-
在 getter 中尝试 console.log(state.Token) 确保数据
-
令牌仍然存在,但它仍然无法正常工作:(我该怎么做我被困了将近一个星期。
标签: vue.js vuejs2 vuex vue-router