/** * 认证状态管理 * 使用 Zustand 管理全局认证状态 */ import { create } from 'zustand'; import { persist } from 'zustand/middleware'; interface User { id: string; email: string; username: string; display_name: string; is_email_verified: boolean; } interface AuthState { user: User | null; accessToken: string | null; refreshToken: string | null; isAuthenticated: boolean; // Actions setAuth: (user: User, accessToken: string, refreshToken: string) => void; clearAuth: () => void; setUser: (user: User) => void; } export const useAuthStore = create()( persist( (set) => ({ user: null, accessToken: null, refreshToken: null, isAuthenticated: false, setAuth: (user, accessToken, refreshToken) => { localStorage.setItem('access_token', accessToken); localStorage.setItem('refresh_token', refreshToken); set({ user, accessToken, refreshToken, isAuthenticated: true, }); }, clearAuth: () => { localStorage.removeItem('access_token'); localStorage.removeItem('refresh_token'); set({ user: null, accessToken: null, refreshToken: null, isAuthenticated: false, }); }, setUser: (user) => { set({ user }); }, }), { name: 'auth-storage', partialize: (state) => ({ user: state.user, isAuthenticated: state.isAuthenticated, }), } ) );