/** * Mock SSO 认证码存储(内存) * 生产环境应使用 Redis 等持久化方案 */ interface MockUser { id: string account: string name: string phone: string avatar: string roles: string[] } interface CodeEntry { user: MockUser expires: number } // 使用 globalThis 避免 Next.js 开发模式下 HMR 导致数据丢失 const globalForCodeStore = globalThis as unknown as { __ssoCodeStore: Map | undefined } if (!globalForCodeStore.__ssoCodeStore) { globalForCodeStore.__ssoCodeStore = new Map() } export const codeStore = globalForCodeStore.__ssoCodeStore! // 定时清理过期 code(仅在非 edge 环境) if (typeof setInterval !== 'undefined') { setInterval(() => { const now = Date.now() for (const [key, val] of codeStore) { if (val.expires < now) codeStore.delete(key) } }, 60_000) } export type { MockUser, CodeEntry }