Vue

Vue实现登陆并使用Vuex保存用户信息

大祥子
2021-09-15 / 0 评论 / 809 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2021年09月15日,已超过925天没有更新,若内容或图片失效,请留言反馈。

Vue实现登陆并使用Vuex保存用户信息功能,直接上代码吧,注释都写的清楚!

// 设置路由跳转的登陆守卫
router.beforeEach((to, from, next) => {
  // 先读缓存模拟登陆
  const user = sessionStorage.getItem('user')
  const nll = null
  // 注销登陆
  if (to.name === 'Logout') {
    // 清空缓存
    sessionStorage.clear()
    // 跳转登陆
    next('/login')
  } else if (to.name === 'Login') {
    // 判断是否为空--是否登陆,登陆直接跳首页
    if (user !== nll) {
      next('/')
    }
  } else if (user === nll) {
    next('/login')
  }
  next()
})

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  // 读取缓存,没有就设置空
  state: sessionStorage.getItem('state') ? JSON.parse(sessionStorage.getItem('state')) : {
    user: {
      user: ''
    }
  },
  // 获取user
  getters: {
    getUser (state) {
      return state.user
    }
  },
  // 唯一可以修改state
  mutations: {
    updataUser (state, user) {
      state.user = user
    }
  },
  // 异步执行mutations方法
  actions: {
    asyncUpdataUser (context, user) {
      context.commit('updataUser', user)
    }
  },
  modules: {
  }
})

// 所有的都验证完成,并且成功,直接执行这句话,跳转并且用Vuex保存用户
 this.$store.dispatch('asyncUpdataUser', { name: formName.account })

<template>
  <div id="app">
    <router-view/>
  </div>
</template>

<script>

export default {
  name: 'App',
  components: {},
  // 第一种解决Vuex刷新数据丢失
  mounted () {
    // 全局监听刷新,刷新就执行saveState写入本地缓存
    window.addEventListener('unload', this.saveState)
  },
  methods: {
    saveState () {
      // 缓存vuex的state数据
      sessionStorage.setItem('state', JSON.stringify(this.$store.state))
    }
  }
  // 第二种解决Vuex刷新数据丢失,iphone使用beforeunload无效所以我没有用
  // created () {
  //   // 在页面加载时读取sessionStorage里的状态信息
  //   if (sessionStorage.getItem('store')) {
  //     this.$store.replaceState(Object.assign({}, this.$store.state, JSON.parse(sessionStorage.getItem('store'))))
  //   }

  //   // 在页面刷新时将vuex里的信息保存到sessionStorage里
  //   window.addEventListener('beforeunload', () => {
  //     sessionStorage.setItem('store', JSON.stringify(this.$store.state))
  //   })
  // }
}
</script>
0

评论 (0)

取消