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

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部