生产管理系统 - 路由错误修复

This commit is contained in:
2025-11-03 11:30:06 +08:00
parent 9791e76d17
commit 73c41b76ab
6 changed files with 1424 additions and 1380 deletions

View File

@@ -236,24 +236,54 @@ export function AuthProvider({ children }: AuthProviderProps) {
}
};
// 初始化时检查 localStorage并验证用户
// 统一的认证初始化和路由监听
React.useEffect(() => {
// 检查是否有存储的用户信息和 token并设置 cookie
const storedUser = localStorage.getItem('user');
if (storedUser) {
try {
const userData = JSON.parse(storedUser);
if (userData.token && !document.cookie.includes('auth-token')) {
setTokenCookie(userData.token);
console.log('🔄 初始化时设置cookie');
}
} catch (error) {
console.error('解析存储用户信息失败:', error);
localStorage.removeItem('user');
}
}
// 处理当前路径的逻辑
const handleCurrentPath = () => {
const currentPath = typeof window !== 'undefined' ? window.location.pathname : '';
validateUser();
// 如果在登录页面,跳过验证,直接设置为非加载状态
if (currentPath.startsWith('/login')) {
console.log('📄 检测到登录页面,跳过用户验证');
stopTokenRefresh(); // 停止任何正在进行的 token 刷新
setLoading(false);
return;
}
// 检查是否有存储的用户信息和 token并设置 cookie
const storedUser = localStorage.getItem('user');
if (storedUser) {
try {
const userData = JSON.parse(storedUser);
if (userData.token && !document.cookie.includes('auth-token')) {
setTokenCookie(userData.token);
console.log('🔄 初始化时设置cookie');
}
} catch (error) {
console.error('解析存储用户信息失败:', error);
localStorage.removeItem('user');
}
}
// 只有在非登录页面才进行用户验证
validateUser();
};
// 立即处理当前路径
handleCurrentPath();
// 监听路由变化
const handlePathChange = () => {
console.log('🔄 路由变化,重新检查认证状态');
handleCurrentPath();
};
// 监听 popstate 事件(浏览器前进后退)
window.addEventListener('popstate', handlePathChange);
return () => {
window.removeEventListener('popstate', handlePathChange);
};
}, []);
// 清理定时器