/** * 认证状态管理 * 使用 Zustand 管理全局认证状态 */ import { create } from "zustand" import { persist } from "zustand/middleware" interface User { id: string user_id: string email: string username: string display_name: string is_email_verified: boolean email_verified: boolean wechat_bound?: boolean wechat_nickname?: string avatar_url?: string phone?: string phone_verified?: boolean profile_completed?: boolean } interface AuthState { user: User | null accessToken: string | null refreshToken: string | null isAuthenticated: boolean // Actions setAuth: (user: User, accessToken: string, refreshToken?: string | null) => 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 = null) => { localStorage.setItem("access_token", accessToken) if (refreshToken) { localStorage.setItem("refresh_token", refreshToken) } else { localStorage.removeItem("refresh_token") } 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, accessToken: state.accessToken, refreshToken: state.refreshToken, }), }, ), )