/** * 认证信息存储工具 * 用于在客户端(浏览器)存储和管理 JWT token 和用户信息 */ /** * 存储的用户信息接口 */ export interface StoredUserInfo { user_id: string; username: string; nick_name: string; email?: string; phone_number?: string; ou_id: string; ou_name: string; is_leader: boolean; user_role: string; sub: string; } /** * 存储 JWT token 到 localStorage */ export function storeAccessToken(token: string): void { if (typeof window === 'undefined') { console.warn('⚠️ storeAccessToken 只能在浏览器环境中使用'); return; } localStorage.setItem('access_token', token); console.log('✅ Token 已存储到 localStorage'); } /** * 获取存储的 JWT token */ export function getAccessToken(): string | null { if (typeof window === 'undefined') { return null; } return localStorage.getItem('access_token'); } /** * 存储用户信息到 localStorage */ export function storeUserInfo(userInfo: StoredUserInfo): void { if (typeof window === 'undefined') { console.warn('⚠️ storeUserInfo 只能在浏览器环境中使用'); return; } localStorage.setItem('user_info', JSON.stringify(userInfo)); console.log('✅ 用户信息已存储到 localStorage'); } /** * 获取存储的用户信息 */ export function getUserInfo(): StoredUserInfo | null { if (typeof window === 'undefined') { return null; } const userInfoStr = localStorage.getItem('user_info'); if (!userInfoStr) { return null; } try { return JSON.parse(userInfoStr) as StoredUserInfo; } catch (error) { console.error('❌ 解析用户信息失败:', error); return null; } } /** * 清除所有认证信息 */ export function clearAuth(): void { if (typeof window === 'undefined') { console.warn('⚠️ clearAuth 只能在浏览器环境中使用'); return; } localStorage.removeItem('access_token'); localStorage.removeItem('user_info'); console.log('✅ 认证信息已清除'); } /** * 检查是否已登录(有有效的 token) */ export function isAuthenticated(): boolean { const token = getAccessToken(); return !!token; } /** * 存储完整的登录响应数据 */ export function storeLoginData(accessToken: string, userInfo: StoredUserInfo): void { storeAccessToken(accessToken); storeUserInfo(userInfo); }