// ============================================================ // auth-persistence — 本地认证偏好持久化(记住账号 / 自动登录) // // 职责: // - 存储/读取登录表单偏好(用户名回填、记住密码、自动登录标记) // - 纯 localStorage 操作,不依赖 React // - 密码从不持久化(安全性由 JWT + safeStorage 保障) // // 与 auth-token.ts 的分工: // auth-token.ts → JWT token 生命周期(refresh/access,safeStorage 加密) // auth-persistence.ts → 登录表单偏好(localStorage 明文,仅用户名/标记) // ============================================================ */ const STORAGE_KEY = 'ele-heixiu-auth'; interface StoredAuth { /** 上次登录的用户名(表单回填用) */ username: string; /** 是否记住用户名(勾选后表单自动回填用户名) */ remember: boolean; /** 是否勾选了自动登录(AppProvider 据此决定启动时是否刷新 token) */ autoLogin: boolean; } function readAuth(): StoredAuth | null { try { const raw = localStorage.getItem(STORAGE_KEY); if (!raw) return null; return JSON.parse(raw) as StoredAuth; } catch { return null; } } function writeAuth(auth: StoredAuth): void { try { localStorage.setItem(STORAGE_KEY, JSON.stringify(auth)); } catch { /* 静默 */ } } // ---------- 公共 API ---------- /** 读取自动登录标记(AppProvider 启动时调用) */ export function getAutoLoginFlag(): boolean { return readAuth()?.autoLogin || false; } /** 仅清除自动登录标记(保留用户名,下次还能回填表单) */ export function clearAutoLoginFlag(): void { const auth = readAuth(); if (!auth) return; writeAuth({ ...auth, autoLogin: false }); } /** 清除所有保存的认证偏好 */ export function clearSavedAuth(): void { try { localStorage.removeItem(STORAGE_KEY); } catch { /* 静默 */ } } /** 保存认证偏好(登录成功时调用) */ export function saveAuth(username: string, remember: boolean, autoLogin: boolean): void { writeAuth({ username, remember, autoLogin }); } /** 读取已保存的用户名(表单回填用) */ export function getSavedUsername(): string { return readAuth()?.username || ''; } /** 读取记住密码标记 */ export function getSavedRemember(): boolean { return readAuth()?.remember || false; } /** 读取自动登录标记 */ export function getSavedAutoLogin(): boolean { return readAuth()?.autoLogin || false; }