生产管理系统 - 路由错误修复
This commit is contained in:
@@ -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);
|
||||
};
|
||||
}, []);
|
||||
|
||||
// 清理定时器
|
||||
|
||||
Reference in New Issue
Block a user