问题描述:
登录模块:
点击登录按钮,触发事件调用后端api,成功时,从后端拿到token。把token存到vuex,使多个组件共享token数据。但是发现,登录后跳转到别的路由后,或者是刷新了页面,vuex里面存的token数据消失了。
登录成功后:
登录成功后,刷新页面: 存入vuex数据丢失
原因:
因为store里的数据是保存在运行内存中的,当页面刷新时,页面会重新加载vue实例(vuex实例是绑在vue实例上面的。),store里面的数据就会被重新赋值初始化
解决方案:
因为:当页面刷新时,页面会重新加载vue实例,store里面的数据就会被重新赋值初始化,所以在vue实例每次被重新加载的时候,把token重新存到vuex里面,这样就可以解决 vuex 里面的token 消失了。
所以在vue实例里面的跟组件App.vue里面将token重新存到vuex里面。
<script>
//解析token的中间件jwt-decode
import jwt_decode from "jwt-decode";
// 每次页面刷新,根组件App.vue都会被重新构建
export default {
created() {
if (localStorage.eleToken) {
const decode = jwt_decode(localStorage.eleToken);
this.$store.dispatch("setIsAutnenticated", !this.isEmpty(decode));
this.$store.dispatch("setUser", decode);
}
},
methods: {
isEmpty(value) {
return (
value === undefined ||
value === null ||
(typeof value === "object" && Object.keys(value).length === 0) ||
(typeof value === "string" && value.trim().length === 0)
);
}
}
}
</script>