登录-异步请求用户数据无法保存-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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值