刷新多此会跳转到登陆的问题解决了,但是刷新会出现更逆天的问题
This commit is contained in:
@@ -4,6 +4,23 @@ import { justLoggedIn } from './authSessionState'; // Import the flag
|
||||
|
||||
const USER_INFO_URL = '/user'; // 获取用户信息的API端点
|
||||
|
||||
/**
|
||||
* 从 sessionStorage 中安全地读取和解析用户信息。
|
||||
* @returns {Object|null} 用户信息对象或null。
|
||||
*/
|
||||
export const getStoredUser = () => {
|
||||
const storedUser = sessionStorage.getItem('currentUser');
|
||||
if (storedUser) {
|
||||
try {
|
||||
return JSON.parse(storedUser);
|
||||
} catch (e) {
|
||||
console.error('Error parsing stored user info:', e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
};
|
||||
|
||||
/**
|
||||
* 检查Token是否存在且(理论上)是否在有效期内。
|
||||
* 服务端 /user接口会验证实际有效期。
|
||||
@@ -22,24 +39,18 @@ export const hasValidToken = () => {
|
||||
*/
|
||||
export const getUserInfo = async () => {
|
||||
if (!hasValidToken()) {
|
||||
console.log(' No token found, skipping getUserInfo.');
|
||||
return null;
|
||||
throw new Error('No valid token found');
|
||||
}
|
||||
try {
|
||||
// console.log('jwt.js: Attempting to fetch user info from', USER_INFO_URL);
|
||||
const response = await axiosInstance.get(USER_INFO_URL);
|
||||
if (response.status !== 200) {
|
||||
router.push('/backend/login');
|
||||
return null;
|
||||
}
|
||||
// console.log('jwt.js: User info received:', response.data);
|
||||
return response.data;
|
||||
const user = response.data;
|
||||
// 将获取到的用户信息存入 sessionStorage
|
||||
sessionStorage.setItem('currentUser', JSON.stringify(user));
|
||||
return user;
|
||||
} catch (error) {
|
||||
router.push('/backend/login');
|
||||
// console.error('jwt.js: Error fetching user info:', error.response ? error.response.status : error.message);
|
||||
// 401错误会被响应拦截器处理(清除token),然后错误会传播到这里
|
||||
// 其他网络错误等也会被捕获
|
||||
return null;
|
||||
// 清除可能存在的无效用户信息
|
||||
sessionStorage.removeItem('currentUser');
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -51,6 +62,7 @@ export const logoutUser = () => { // 不再是 async,因为它不执行异步
|
||||
// console.log('jwt.js: logoutUser called. Clearing local storage.');
|
||||
localStorage.removeItem('access_token');
|
||||
localStorage.removeItem('user_id');
|
||||
sessionStorage.removeItem('currentUser'); // 同时清除sessionStorage中的用户信息
|
||||
// 导航将由调用者(如路由守卫)处理
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user