vuex结合sessioStorage存储用户信息
登录状态保存
应用场景,一般用户登录之后会从登录注册变成欢迎你,用户名这里用个v-if就可以了,不说这个,这个用sessionStorage可以存储,如果不用vuex的话直接在登录组件中点击登录方法之后
sessionStorage.setItem(“user”, “res.data.user”);
在需要使用的地方sessionStorage.getItem(“lastname”);就可以了,
vuex内保存sessionStorage先说一下流程
1)在登录界面中
接收后台传过来的数据并赋值
var user_msg=res.data.user;
//调用gologin 去改变store中的数据,调用gologin方法,commit提交
this.$Store.commit('gologin',user_msg)
2)在stour的index.js中写了俩个对象,一个用来存user,一个用来存session,
//在gologin方法中赋值的同时定义数据的时候也需要赋值一次session,不然会导致刷新网页之后你的session存在但是不会显示出来,
user_session:sessionStorage.getItem("user"),
user:'',
需要一提的是sessionStorage只能存字符串,像对象之类的复杂数据需要用JSON对象的stringify和parse来处理,在这里我把对象用stringify序列化成string类型的字符串,之后用的时候会再进行处理
mutations :{
//登录改变user状态
gologin(state, user_list){
var user=JSON.stringify(user_list);
sessionStorage.setItem("user",user);
state.user_session=sessionStorage.getItem("user");
state.user=user_list;
},
//退出 该表状态
goquit(state){
sessionStorage.clear();
state.user_session='';
state.user='';
}
},
做完这些就可以把一个用户对象和session存在了vuex中,使用过vuex的都配置$ Store在main.js中,所以用的时候直接$ stroe.state就可以获取了,但是每个需要用到的地方都获取一次store而且 还要使用提到的parse来转成对象很复杂,所以提取了一个公共方法,fun(){ }
另起一个fun.js文件 并且在main.js中定义
import fun from './fun.js'
Vue.prototype.$comon= fun
这样就可以this.$comon来调用fun.js了
在fun.js中的代码编辑如下
import store from './store/index'
var fun = {
user() {
if((store.state.user_session)!=' ')
{
return JSON.parse(store.state.user_session);
}else {
return store.state.user_session;
}
}
}
export default fun;
这里的一个判断逻辑主要是为了解决一个报错问题,如果用户退出了登录,则会报错,其实else不传也可以,
这样就完成所有的代码编辑了
在组件中使用的时候
date (){
return{
user: '',
}
},
created(){
this.user=this.$comon.user()
}
就可以获取user的session了
当然由于在上面代码中多定义了一个user在vuex中
也可以this.$store.state.user获取用户信息 不过不是session存储的。