使用 localStorage 持久化用户登录状态

在现代Web应用中,保持用户的登录状态是一个非常重要的功能。本文将介绍如何使用localStorage和Vuex在用户登录后持久化登录状态,并在页面刷新后保持用户的登录状态。

1. store/index.js

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

Vue.use(Vuex);

export default new Vuex.Store({
  state: {
    user: null // 用户信息
  },
  mutations: {
    setUser(state, user) {
      state.user = user;
    },
    clearUser(state) {
      state.user = null;
    }
  },
  actions: {
    login({ commit }, user) {
      commit('setUser', user);
      // 将用户信息存储到 localStorage
      localStorage.setItem('user', JSON.stringify(user));
    },
    logout({ commit }) {
      commit('clearUser');
      // 从 localStorage 移除用户信息
      localStorage.removeItem('user');
    }
  }
});

二、应用启动时恢复用户信息

在应用启动时,从localStorage中恢复用户信息到Vuex中:

main.js

import Vue from 'vue';
import App from './App.vue';
import store from './store';

Vue.config.productionTip = false;

// 从 localStorage 中恢复用户信息
const user = JSON.parse(localStorage.getItem('user'));
if (user) {
  store.commit('setUser', user);
}

new Vue({
  store,
  render: h => h(App)
}).$mount('#app');

三、用户登录后存储用户信息

在用户登录后,将用户信息存储到Vuex和localStorage中:

登录组件

<template>
  <div>
    <!-- 登录表单 -->
    <button @click="login">登录</button>
  </div>
</template>

<script>
import { mapActions } from 'vuex';

export default {
  methods: {
    ...mapActions(['login']),
    login() {
      // 假设你已经通过 API 获取了用户信息 user
      const user = {
        id: 1,
        name: 'John Doe',
        token: '1234567890abcdef'
      };

      // 存储到 Vuex 和 localStorage
      this.login(user);
    }
  }
};
</script>

四、使用用户信息

你可以在应用的任何地方使用Vuex中存储的用户信息。例如:

某个组件

<template>
  <div>
    <p v-if="user">欢迎, {{ user.name }}</p>
    <p v-else>请登录</p>
    <button @click="logout">注销</button>
  </div>
</template>

<script>
import { mapState, mapActions } from 'vuex';

export default {
  computed: {
    ...mapState(['user'])
  },
  methods: {
    ...mapActions(['logout'])
  }
};
</script>

五、总结

通过以上步骤,你就可以在用户登录后将登录状态存储在localStorage中,并在页面刷新后保持登录状态。这样可以确保用户在刷新页面或重新打开浏览器后仍然保持登录状态。

希望本文对你有所帮助。如果你有任何问题或建议,欢迎在评论区留言讨论。

  • 27
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值