位置: 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执行流程简单)

  • 鸿蒙怎么去掉负一页(鸿蒙怎么去掉负一屏网页)

    鸿蒙怎么去掉负一页(鸿蒙怎么去掉负一屏网页)

  • 手机卡领的QQ音乐会员怎么登(手机卡领的qq音乐会员怎么用)

    手机卡领的QQ音乐会员怎么登(手机卡领的qq音乐会员怎么用)

  • users在c盘哪个位置(电脑c盘中user是什么文件)

    users在c盘哪个位置(电脑c盘中user是什么文件)

  • 苹果11为什么微信打开才能收到信息(苹果11为什么微信来消息没有声音)

    苹果11为什么微信打开才能收到信息(苹果11为什么微信来消息没有声音)

  • 淘宝换货会预留库存吗(淘宝换货商家会预留商品吗)

    淘宝换货会预留库存吗(淘宝换货商家会预留商品吗)

  • 拼多多助力链接打不开(拼多多助力链接怎么弄)

    拼多多助力链接打不开(拼多多助力链接怎么弄)

  • iphone11左上角触控不灵敏(苹果11左上角屏幕按下去怎么会和后面有声音)

    iphone11左上角触控不灵敏(苹果11左上角屏幕按下去怎么会和后面有声音)

  • 录屏怎么关闭不了(录完屏怎么关闭)

    录屏怎么关闭不了(录完屏怎么关闭)

  • iphone11面容解锁一直转圈(iphone11面容解锁突然不能用了)

    iphone11面容解锁一直转圈(iphone11面容解锁突然不能用了)

  • 淘宝助理怎么不能用了(淘宝助理不能用可以用什么软件)

    淘宝助理怎么不能用了(淘宝助理不能用可以用什么软件)

  • 荣耀v20有光学防抖动吗(荣耀v20有没有光学防抖)

    荣耀v20有光学防抖动吗(荣耀v20有没有光学防抖)

  • 苹果11刚激活什么时候充电(苹果11激活之后怎么使用)

    苹果11刚激活什么时候充电(苹果11激活之后怎么使用)

  • 苹果11首充多长时间(iphone11首充要充满吗)

    苹果11首充多长时间(iphone11首充要充满吗)

  • 华为c8817d什么型号(华为c8817e是什么型号)

    华为c8817d什么型号(华为c8817e是什么型号)

  • 王卡激活为什么显示没有查询到(王卡激活就要扣钱了吗)

    王卡激活为什么显示没有查询到(王卡激活就要扣钱了吗)

  • 苹果手机充电口有液体怎么办(苹果手机充电口进水提示无法充电)

    苹果手机充电口有液体怎么办(苹果手机充电口进水提示无法充电)

  • 闲鱼可以看到访客吗(闲鱼有访问记录吗)

    闲鱼可以看到访客吗(闲鱼有访问记录吗)

  • 腾讯企业微信是什么(腾讯企业微信是干嘛用的?)

    腾讯企业微信是什么(腾讯企业微信是干嘛用的?)

  • iphonex怎么查保修时间(苹果x如何看保修时间)

    iphonex怎么查保修时间(苹果x如何看保修时间)

  • 怎么弄ppt兼容模式(怎么弄ppt兼容模板)

    怎么弄ppt兼容模式(怎么弄ppt兼容模板)

  • 企业微信怎么解绑个人微信(企业微信怎么解封)

    企业微信怎么解绑个人微信(企业微信怎么解封)

  • 密友圈打电话免费吗(密友圈电话是什么意思)

    密友圈打电话免费吗(密友圈电话是什么意思)

  • qt语音怎么关闭(qt语音换成什么了)

    qt语音怎么关闭(qt语音换成什么了)

  • apple store退款什么时候到账(apple store的退款几天到账)

    apple store退款什么时候到账(apple store的退款几天到账)

  • mac系统怎么给iphone7和iphone7plus自定义电话铃声?(mac怎么airdrop给ipad)

    mac系统怎么给iphone7和iphone7plus自定义电话铃声?(mac怎么airdrop给ipad)

  • 用于员工福利的会计分录
  • 个体户每月开票超3万
  • 送货运杂费属于什么费用
  • 发票校验码被章盖住了
  • 电信宽带个人和公司办收费标准
  • 收到项目投资款账务处理
  • 小规模没有成本票企业所得税怎么办呀
  • 工程项目结算方式有哪几种
  • 应交税金进项税的会计分录
  • 家电公司销售电器赠送小礼品如何做账?
  • 土地使用权入账价值
  • 企业代办业务有哪些
  • 递延所得税费用为负数是什么意思
  • 公司认缴增资需要什么流程呢
  • 对公账户上扣缴的税怎么做分录?
  • 房企结转收入
  • 财务兼职怎么算工资
  • 滴滴开的发票能否抵扣进项税
  • 营改增后挂靠工程会计分录具体怎么做?
  • 购买承兑汇票怎么做账
  • 智能化的发展现状与趋势
  • 总公司人员的工资子公司可以发吗
  • zmweb.exe是什么进程
  • 报销是可以直接拿钱的吧
  • 网线插上还是显示红叉
  • php基础入门教程
  • 对其他公司的建议
  • 工会经费两种拨缴方式
  • 库存盘点的差异怎么算
  • 本季度企业所得税
  • 总分机构 分总机构
  • ubuntu busier
  • 上海广为
  • 猿创部落是干什么的
  • 增值税政策执行口径存在的问题及建议
  • 同城票据交换差额户金额从哪得来的
  • 摄影属于哪种服务业
  • 贴现业务受理该怎么做
  • 转租行为的税务处理方法
  • 每天统计数据的表格
  • 企业设立账簿
  • 周转材料主要包括什么和什么
  • 土地使用权的核算
  • 拨缴经费收入
  • 当月进项税额大但是也要交增值税吗
  • 科技专项资金
  • 其他权益工具投资公允价值变动计入什么科目
  • 常见的递延所得税
  • 货款扣除质量赔款
  • 员工办理健康证费用由谁支付
  • 个体工商户和小规模纳税人的区别
  • 以前年度应收账款无法收回
  • 成本费用率计算公式中包含税金及附加吗
  • 什么是个人独资企业营业执照
  • 私营企业会计退休年龄50还是55
  • mysql8.0免安装
  • 关于月亮的诗句
  • mysql 5.6.23 winx64.zip安装详细教程
  • win10的java环境该怎么配置?java环境变量配置介绍
  • windows z
  • dns server配置
  • mac电脑自带软件介绍
  • 恢复已删除的聊天记录微信
  • Linux系统安全配置包括
  • 电脑windows8怎么样
  • win7系统打不开win10安装包
  • windows 10预览版
  • 怎么禁止电脑qq自动启动
  • js编程实例
  • 深入理解ffmpeg pdf
  • python火车订票系统
  • Node.js中的事件循环是什么
  • 安卓手机wifi界面
  • Android---59---Toast的使用
  • unity-
  • 在javascript中如何定义并调用函数
  • 新办企业税务局注册流程
  • 限售股转让如何交税
  • 进口柴油消费税是多少
  • 生产企业出口退税账务处理会计分录
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设