当前位置: 首页 > news >正文

登录-异步请求用户数据无法保存-bug

bug情况:
在进行登录时需要发送两次一次是登录请求,一次是登录后获取用户信息,但是浏览器本地存储没有成功保存user信息
原登录方法:

// 账号密码登录
function login() {formRef.value.validate((valid) => {if (valid) {//发送登录请求userLogin(state.form).then((res) => {setToken(res.data.token);userStore.setUserInfo(res.data);const user=getUserInfo(res.data.userId)userStore.setUserInfo(user.data);close();location.reload();});} else {console.log("error submit!!");return false;}});
}

登录
image.png
在进行登录后浏览器的本地存储
image.png
image.png
user信息还是为空,只保存了token
原因:
问题所在
异步问题:getUserInfo 是一个异步操作,你需要等待它的结果。
数据覆盖:直接使用 userStore.setUserInfo(user.data) 可能会覆盖之前保存的部分信息。
解决方案
处理异步操作:确保 getUserInfo 的结果被正确处理。
合并数据:确保最终保存的数据是完整的。

解决方法

//账号密码登录
function login() {formRef.value.validate((valid) => {if (valid) {// 发送登录请求userLogin(state.form).then((res) => {setToken(res.data.token);// 保存登录返回的基本信息userStore.setUserInfo(res.data);// 异步查询用户详细信息getUserInfo(res.data.userId).then((userRes) => {// 合并登录信息和查询信息const userInfo = { ...res.data, ...userRes.data };userStore.setUserInfo(userInfo);close();location.reload();}).catch((error) => {console.error('Failed to get user info:', error);});}).catch((error) => {console.error('Failed to login:', error);});} else {console.log("error submit!!");return false;}});
}

效果:
在浏览器的本地存储user信息被成功返回并保存下来
image.png


http://www.mrgr.cn/news/19044.html

相关文章:

  • 后端MVC三层架构,Mybatis ,雪花算法生成唯一id
  • 计算机毕业设计Spark+PyTorch知识图谱中药推荐系统 中药数据分析可视化大屏 中药爬虫 机器学习 中药预测系统 中药情感分析 大数据毕业设计
  • Hyper-v 安装 centOS
  • Python青少年简明教程:模块
  • 记一次某中学系统越权漏洞
  • 【深入了解Java常用类】
  • LeetCode:2708. 一个小组的最大实力值(动态规划 Java)
  • 算法day20|669. 修剪二叉搜索树、将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树
  • MySQL 锁机制详解
  • 跟我一起学FPGA (二) 语法讲解
  • 八股训练营感想
  • 多表查询_关联查询
  • 【win11】win11取消开机密码
  • 嵌入式Linux:常见信号的默认行为
  • 在vue项目中,有两个tab页,在其中一个页面调用另一个页面的方法
  • AUTOSAR_EXP_ARAComAPI的3章节笔记
  • 如何从 Bak 文件中恢复 SQL数据库?(3种方法)
  • 学习记录——day42 多态
  • 浅谈 cookie 和 session
  • CMake构建学习笔记14-依赖库管理工具