首页 > 其他分享 >使用 localStorage 持久化用户登录状态

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

时间:2024-06-23 15:32:06浏览次数:3  
标签:持久 登录 用户 localStorage user import Vuex

在现代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中,并在页面刷新后保持登录状态。这样可以确保用户在刷新页面或重新打开浏览器后仍然保持登录状态。

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

标签:持久,登录,用户,localStorage,user,import,Vuex
From: https://blog.csdn.net/m0_65084430/article/details/139811769

相关文章

  • 深入理解redis持久化—AOF日志
    redis为什么需要持久化redis是内存数据库,redis所有的数据都保存在内存中如果此时pc关机或重启,那么内存中的用户数据岂不是丢失了?redis这么不安全吗?作为数据库,保证数据的安全,持久是基本需求,redis采用了AOF和RDB两种持久化方式,将用户数据以特殊形式保存在磁盘中,确保重启时......
  • Ubuntu 24.04 LTS 开启 ssh 免密登录
    参考https://zhuanlan.zhihu.com/p/146976128https://www.myfreax.com/how-to-set-up-ssh-keys-on-ubuntu-20-04/https://www.cnblogs.com/deepinnet/p/13663534.htmlhttps://blog.csdn.net/counsellor/article/details/81182567环境环境版本说明UbuntuUbuntu......
  • Redis作为常见的缓存工具,我们是如何进行redis缓存持久化的呢?
    Redis的数据是全部存储在内存之中,但如果这时候Redis服务宕机,那存储在内存中的数据也会一并丢失,所以为了让redis的数据避免丢失或者是少丢失一点,就要利用策略来将redis的数据存入到磁盘之中,所以就诞生了redis的持久化。即Redis持久化的意义就是为了保证突然宕机,内存数据不会全部......
  • 【阿里云服务器】【弹性云服务ECS】通过ssh登录远程服务器
    一、操作系统使用Windows11主机上的Ubuntu子系统,如下图所示:二、云服务器登录方法需知道:服务器ip地址、登录名和自己设置的登录密码:上述系统用户名为root,需要在Ubuntu子系统中同样切换至root用户,才能正常登录:登录命令:sshxx.xx.xx.xx(服务器ip地址)然后按照提示输......
  • redis持久化操作【随记】
    持久化Redis它是将数据保存到内存当中,内存里的数据最大特点:断电易失.保存在内存的数据就没有了.如果如果这些数据还有用,业务使用啥的,不能就让它这么没有了.redis当中提供持久化机制,说白了,将内存的数据—->写入到磁盘.–>持久化.1rdb方式redisdatabase,持......
  • 记某模版菠菜管理后台登录思路
    1.前言由于小程序的便捷性,越来越多的应用迁移到了了小程序上,由此伴随着小程序上线前的日常渗透测试工作也开始增加。但小程序的测试中经常会遇到数据包被加密了,导致无法进行改包测试。和测试网页数据包加密一样,就需要找到小程序前端相应的加解密方法进行加解密数据包改包测......
  • 可持久化Trie
    更好的体验带注释的代码开始理解可持久化,这里因为是acwing打卡,可以放图片了有可能会用图片,尽量打字可持久化trie,就是一个trie树但是可以通过不同的开头(root),变成每个历史状态这里就用到上面的图片了,每次更新trie树,这条新加入的链一定要......
  • 登录系统
    1usingSystem;2usingSystem.Collections.Generic;3usingSystem.ComponentModel;4usingSystem.Data;5usingSystem.Drawing;6usingSystem.Linq;7usingSystem.Text;8usingSystem.Windows.Forms;910namespace_1211{12publicpartial......
  • 登录系统
    usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;namespace_01{publicpartialclassForm1:Form{pu......
  • 登录界面(C#)
    usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;namespaceWindowsFormsApplication1{publicpartialclassForm1:......