位置: IT常识 - 正文

Vue项目保持用户登录状态(localStorage + vuex 刷新页面后状态依然保持)(vuex存储用户信息)

编辑:rootadmin
Vue项目保持用户登录状态(localStorage + vuex 刷新页面后状态依然保持)

推荐整理分享Vue项目保持用户登录状态(localStorage + vuex 刷新页面后状态依然保持)(vuex存储用户信息),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue 状态保持,vue保存后还能修改吗,vue保存用户登录状态,vue保存用户登陆信息,vue保存用户登录状态,vue保存用户登录状态,vue保存用户登录状态,vue保存用户登录状态,内容如对您有帮助,希望把文章链接给更多的朋友!

        在前端项目开发中,实现用户的登陆注册功能时常常会有一个问题,那就是我们设置的登录状态,在浏览器页面刷新后就消失了,这其实只是因为我们没有保存用户状态。

这里小马演示使用的是 localStorage + vuex 方法(其他诸如 sessionStorage、cookie 等用法相同,只是功能有所区别)。 

一、实现效果

实现功能:用户登录成功后,刷新浏览器页面或者关闭浏览器再次打开网页后,登录状态依然保持,直到用户点击登出。

二、实现步骤及涉及要点

1. 首先在 vuex 中的 state 属性中添加一个空对象 userInfo{ } 用于保存用户登录后的状态;

涉及要点:

state 属性(状态)用于添加多个组件共享的变量,作用类似于 vue 中的 data;

2. 在登录页面中,判断登录成功后创建对象 userInfo{ },并添加描述登录状态的各属性,然后将该对象分别存入 localStorage 和 vuex; 

Vue项目保持用户登录状态(localStorage + vuex 刷新页面后状态依然保持)(vuex存储用户信息)

涉及要点:

localStorage 属性允许访问 Document 源的 Storage 对象,存储的数据保存在浏览器会话中;与 sessionStorage 的唯一区别就是 localStorage 属于永久性存储,除非我们手动清除,而 sessionStorage 属于临时存储,浏览器关闭后便会被清空。

存:localStorage.setItem('myCat', 'Tom');取:var cat = localStorage.getItem("myCat");删:localStorage.removeItem("myCat"); 或 localStorage.clear("myCat");JSON.stringify() 系列化对象,将返回的对象类型转为字符串类型;this.$store.state,取 vuex 中 state 中的属性,如:

this.$store.state.userInfo = userInfo //取出 vuex 中的 userInfo 并赋值为新的 userInfo

3. 在挂载阶段,判断登录状态 userInfo;设置相关属性之后,就可以正常保存登录状态了。

因为 localStorage 为永久保存,所以即使关闭浏览器再次打开网页登录状态依然存在,除非手动清除 localStorage 数据;

4. 设置登出,清除 localStorage 中的数据;

5. 实现功能。

三、涉及代码

vuex(store/index.js)

import Vue from 'vue'import Vuex from 'vuex'Vue.use(Vuex)export default new Vuex.Store({ state: { userInfo:{} }, mutations: { }, actions: { }, modules: { }})

设置登录的页面(部分代码,无法复制即用,仅作参考)

登录方法

//登录方法login() { //验证码的验证 var randStr = this.rand.toString().replace(/,/g, ""); //随机生成的验证码为数组形式,此处将其转为字符串并去掉中间相隔的逗号 var codeStr = this.code; //用户输入的验证码 if (randStr.toLowerCase() == codeStr.toLowerCase()) { //比较用户输入的与随机生成的验证码,不区分大小写 //获取登录接口 axios.post("user/login", { name: this.name, password: this.password, administrator: this.usertyp }).then(result => { console.log(result.data); const code = result.data.code; this.token = code; if (this.token == 1003) { this.$message.error('用户名或密码未输入!'); } else if (this.token == 1001) { this.$message.error('登录失败,请检查用户名或者密码是否正确。'); } else if (this.token == 1005) { this.$message.error('您不是管理员,无管理员登录权限!'); } else if (this.token == 200) { if (this.usertyp == "2") { //管理员登录 this.$message.success('登录成功!'); this.dialogFormVisible = false; //登录成功后登录插槽关闭 this.loginReg = false;//隐藏登录注册按钮,显示欢迎信息 this.manage = true;//显示管理员登录信息 let userInfo = { isLogin: true, manage: true, name: this.name }; localStorage.setItem("userInfo", JSON.stringify(userInfo)); this.$store.state.userInfo = userInfo console.log('this.$store.state.userInfo', this.$store.state.userInfo) setTimeout(() => { //此处必须使用vue函数,否则this无法访vue实例 this.$message(`欢迎您,管理员 ${this.name}!`) }, 2000); console.log(this.usertyp) } else if (this.usertyp == "") { //普通用户 this.$message.success('登录成功!'); this.dialogFormVisible = false; //登录成功后插槽关闭 this.loginReg = false;//隐藏登录注册按钮,显示欢迎信息 this.user = true; //显示普通用户登录信息 let userInfo = { isLogin: true, manage: false, name: this.name } localStorage.setItem("userInfo", JSON.stringify(userInfo)); this.$store.state.userInfo = userInfo setTimeout(() => { //此处必须使用vue函数,否则this无法访vue实例 this.$message(`欢迎您,尊贵的晋之魂用户 ${this.name}!`) }, 2000); console.log(this.usertyp) } this.Cookie.set("UserName", this.name); //将用户名存到cookie console.log('登录状态为:' + this.token); } }) } else { this.$message.error('请输入正确的验证码'); }},

退出登录方法

//退出登录logout() { this.Cookie.remove("UserName"); this.loginReg = true; this.manage = false; this.user = false; this.log_out = false; localStorage.clear(); setTimeout(() => { this.$router.push({ path: '/' }, () => { }, () => { });//退出登录后2秒后跳转至首页 }, 2000) //加()=>{},()=>{} 可解决路由重复后台报错问题},

挂载阶段判断登录状态

mounted() { // 判断登录状态 let userInfo = JSON.parse(localStorage.getItem('userInfo')); if (null === userInfo) return; console.log('userInfo', userInfo.isLogin); if (userInfo.isLogin) { this.dialogFormVisible = false; //登录成功后插槽关闭 this.loginReg = false;//隐藏登录注册按钮,显示欢迎信息 this.name = userInfo.name; if (userInfo.manage) { this.manage = true;//显示管理员登录信息 } else { this.user = true;//显示普通用户登录信息 } } }

提示:小马使用的是 vue + Element UI,使用其他技术代码可能不同,但思路是不变的。

本文链接地址:https://www.jiuchutong.com/zhishi/295961.html 转载请保留说明!

上一篇:vuex中this.$store.commit和this.$store.dispatch的用法

下一篇:SpringMVC执行流程(springmvc执行流程简单)

  • 我国流转税的税种有哪些
  • 所得税汇算补提所得税会计分录
  • 公司法人已变更,前法人被失信
  • 以前年度损益调整账务处理分录
  • 同一法人的两家企业可以以同一投标人身份投标吗
  • 小规模纳税人计税方法
  • 公司员工受伤怎么报工伤
  • 明细分类账采用的格式有
  • 企业取得非货币性收入
  • 单位租个人房屋怎么开票
  • 上个月未抵扣忘记做进项会计分录
  • 出售资产时递延所得税怎么处理
  • 调试阶段是什么意思
  • 企业受托研发产品有哪些
  • 哪些费用可以计入待摊费用
  • 税务稽查补缴的税款怎么处理
  • 劳务报酬代扣代缴个人所得税怎么做账
  • 报价表含税点是什么意思?
  • 农民专业合作社普通发票抵扣
  • 公益性捐赠公告
  • 失控发票不处理的后果
  • 企业车辆保险费要按什么交印花税的
  • 企业已交地税税金如何做账务处理?
  • 营业外支出汇算清缴调增填哪
  • 现金流量的具体识别标准
  • 分项结转法怎么结转
  • 销售回款率的具体指标
  • 注销公司如何清算
  • 支付航天的代理公司
  • 营改增全面推开为什么还叫试点
  • frontpage在哪里打开
  • php未定义数组下标0
  • 煤炭贸易公司账务大全
  • 正常损失非正常损失
  • 企业收到分红款,要怎么处理才合理
  • 格雷厄姆岛
  • 企业所得税汇算清缴账务处理
  • 女方结婚申请
  • 跨年度收取的发票怎么开
  • sort文件名
  • 员工内部罚款能不能抵扣个税
  • 工会经费残保金怎么申报
  • 研发费用资本化计入什么科目
  • 应收账款计提坏账准备方法
  • 固定资产报废后累计折旧
  • mysql常用查询语句大全
  • 期间费用指哪些费用
  • 上市公司发放现金的规定
  • 为什么说运输是实现物流合理化的关键
  • 在建工程如何转固
  • 技术服务费如何赋码
  • 资产负债表中的应收账款应根据什么填列
  • 跨年度退货可以不退款吗
  • 进项跟销项金额一样是否可行
  • 在数据库中对数据表进行生成的是
  • vmware虚拟机无法打开内核设备怎么办
  • vc_mbcsmfc.exe是什么
  • vssvc.exe
  • wysafe.exe是什么
  • linux中使用grep命令显示包含特殊字符的行
  • Linux系统中的pycharm怎么打开
  • linux ls常用命令
  • cocos2d-js-min.js
  • opengl绘制球面
  • 优质推荐
  • 安卓游戏模拟游戏制作
  • jq拖拽div替换位置
  • 网页设置透明背景
  • 手把手教你学python
  • 如何在unity里设置碰撞体积
  • 实用的批处理
  • python颜色表
  • jquerychange事件
  • python 上传文件到ftp
  • python计算π值
  • python黑帽子怎么样
  • python+flask
  • 重庆电子税务局网页版登录
  • 12366纳税服务热线工作时间
  • 本科毕业去上海找什么工作好
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设