Vuex和sessionStorage结合使用,存储数据实现用户登录以及如何使用数据

本文介绍了如何配置Vuex来管理登录状态、用户信息和菜单数据,包括actions、mutations和getters的组织,以及登录操作中数据的存储和使用。关键步骤包括登录成功后的数据存储和组件间通过getters获取数据的应用实例。
摘要由CSDN通过智能技术生成

一、配置vuex

        将actions、mutation、getters独立成文件方便管理,在index.js引入,再一起暴露

               index.js

import Vue from 'vue'
import Vuex from 'vuex'
import actions from './actions'
import mutations from "./mutations";
import getters from "./getters";
Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    //是否登录
    isLogin:window.sessionStorage.getItem("isLogin")?Boolean(window.sessionStorage.getItem("isLogin")): false,
    //登录用户信息
    userInfo:(window.sessionStorage.getItem("userInfo"))? JSON.parse(window.sessionStorage.getItem("userInfo")):[],
    //菜单信息
    menuInfo:(window.sessionStorage.getItem("menuInfo"))? JSON.parse(window.sessionStorage.getItem("menuInfo")):[],
    //用户登录成功后持有的token
    token:'',
    //是否刷新页面
    isRefresh:true,
  },
  actions:actions.actions,
  mutations:mutations.mutations,
  getters:getters.getters,

})

                actions.js

export default {
    actions:{
        //向mutation提交登陆成功
        LoginSuccess({commit},data){
            commit('LoginSuccess',data)
        },
        //存储token
        SaveToken({commit},token){
            commit('SaveToken',token)
        },
        //退出登录
        LoginExit({commit}){
            commit('LoginExit')
        },
        setNoRefresh({commit}){
            commit('setNoRefresh')
        },

    }
}

                mutations.js

export default {
    mutations:{
        //登陆成功
        LoginSuccess(state,data){
            state.isLogin=true
            state.isRefresh=true
            window.sessionStorage.setItem("isLogin",true)
            state.userInfo=data.user
            state.menuInfo=data.menuInfo
            console.log(data)
            sessionStorage.setItem('userInfo',JSON.stringify(data.user))
            sessionStorage.setItem('menuInfo',JSON.stringify(data.menuInfo))
        },
        //存储token
        SaveToken(state,token){
            state.token=token
        },
        //退出登录
        LoginExit(state){
            state.isLogin=false;
            state.userInfo = [];
            window.sessionStorage.setItem("isLogin",false);
            window.sessionStorage.removeItem("userInfo");
            window.sessionStorage.removeItem("menuInfo");
        },
        setNoRefresh(state){
            state.isRefresh = false; //设置不刷新
        },

    }
}

        getters.js

export default {
    getters:{
        //用户信息
        userInfo(state){
            return state.userInfo
        },
        //是否刷新
        IsRefresh(state){
            return  state.isRefresh
        },
        //是否登录
        IsLogin(state){
            return state.isLogin
        },
        //菜单树状列表
        menuTree(state){
            return state.menuInfo
        }
    }

}

二、登录操作

登录成功后,将后台返回的用户相关数据以及菜单数据存储

this.$axios.post(this.$api.user.login, this.$qs.stringify(this.user)).then(res=>{
    let result=res.data
    if(result.code==200){
       let data={
                  user:result.user,
                  menuInfo:result.menuInfo
                }
       //用vuex存储用户信息,token信息,menu信息
       this.$store.dispatch('LoginSuccess',data)
       this.$store.dispatch('SaveToken',result.user.token)
       //用session存储token                                        
       sessionStorage.setItem('setToken',JSON.stringify(result.user.token))
       //动态添加路由 
       DynamicRouter.DynamicAddRouter()
       this.$router.push('/home/index')
     }else {
            this.$message({
                            message: result.message,
                            type: 'warning'
                            });
            }
 }).catch(err=>{
               console.log(err)
               this.$message.error('请求出错,请联系管理员');
         })

三、数据使用

在需要使用数据的组件引入getters,当成computed属性使用

如在导航需要显示用户姓名以及头像

         引入:

        使用: 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值