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;
}
});
}
登录
在进行登录后浏览器的本地存储
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信息被成功返回并保存下来