生产管理系统 - 中间件拦截所有路由

This commit is contained in:
2025-10-31 17:08:25 +08:00
parent ad600ce059
commit 0df19c9cfb
5 changed files with 165 additions and 46 deletions

View File

@@ -3,6 +3,21 @@
import React, { createContext, useContext, useState, ReactNode } from 'react';
import { getCurrentUserInfoApiV1AuthMeGet } from '@/lib/api/sdk.gen';
// Cookie 操作工具
const setTokenCookie = (token: string) => {
if (typeof document !== 'undefined') {
document.cookie = `auth-token=${token}; path=/; max-age=${7 * 24 * 60 * 60}`;
console.log('🍪 Token已设置到cookie');
}
};
const removeTokenCookie = () => {
if (typeof document !== 'undefined') {
document.cookie = 'auth-token=; path=/; max-age=0';
console.log('🗑️ Token已从cookie中清除');
}
};
interface User {
id: string;
username: string;
@@ -36,12 +51,19 @@ export function AuthProvider({ children }: AuthProviderProps) {
setUser(userData);
// 存储到 localStorage
localStorage.setItem('user', JSON.stringify(userData));
// 同时设置 cookie供中间件使用
if (userData.token) {
setTokenCookie(userData.token);
}
setLoading(false);
};
const logout = () => {
setUser(null);
localStorage.removeItem('user');
removeTokenCookie(); // 清除 cookie
setLoading(false);
};
@@ -88,6 +110,21 @@ 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');
}
}
validateUser();
}, []);