意大利语网站建设下载百度app最新版并安装
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信息被成功返回并保存下来