gcx/frontend
hailin a893dbdb1b feat(genex-mobile): Token 持久化 — 登录状态跨重启保持
## 核心变更

### 新增 SessionStorage (lib/core/storage/session_storage.dart)
- flutter_secure_storage 封装层
- Android: EncryptedSharedPreferences(AES-256,Android Keystore 托管密钥)
- iOS: Keychain(AccessibilityFirstUnlock)
- 存储键: genex_access_token / genex_refresh_token / genex_user_json
- API: save() / load() / updateTokens() / getRefreshToken() / clear()

### 升级 ApiClient (lib/core/network/api_client.dart)
- 新增 Dio 错误拦截器(_buildAuthInterceptor)
- 401 自动触发 Token 静默刷新,成功后无感重试原始请求
- Completer 并发锁:多个 401 同时发生只执行一次刷新,其余等待结果
- 跳过重试的端点:/auth/refresh、/auth/login、/auth/register 等
- configureAuthCallbacks():注册 onTokenRefreshed / onSessionExpired 反向回调

### 升级 AuthService (lib/core/services/auth_service.dart)
- _setAuth():登录/注册后 await 写入 SecureStorage
- _clearAuth():登出/Token 过期后 await 清除 SecureStorage
- restoreSession():App 冷启动时从 SecureStorage 恢复 Token + 注册 ApiClient 回调
- refreshToken():主动刷新(正常由拦截器自动触发,无需手动调用)

### 升级 main.dart
- await AuthService.instance.restoreSession() 在 runApp 前执行
- initialRoute 动态判断:isLoggedIn → '/main',否则 '/'
- 全局 NavigatorKey(_navigatorKey)挂载到 MaterialApp
- 监听 authState ValueNotifier:Token 过期后自动导航回 '/'(pushNamedAndRemoveUntil)

## 用户体验
- 登录后关闭 App 再打开:直接进主界面,无需重新登录
- Access Token 过期:ApiClient 自动静默刷新,用户无感知
- Refresh Token 过期:清除本地会话,跳回欢迎页,提示重新登录
- 主动登出:清除 SecureStorage,跳回欢迎页

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-04 02:01:27 -08:00
..
admin-app feat(android): APK versionCode 自动递增 — 每次编译自增,各环境独立计数 2026-03-03 09:09:13 -08:00
admin-web fix(ui): 修复登录页中英混用 + 搜索栏溢出,更新品牌口号并支持后台配置 2026-03-03 20:41:37 -08:00
genex-mobile feat(genex-mobile): Token 持久化 — 登录状态跨重启保持 2026-03-04 02:01:27 -08:00
miniapp/src fix(ui): 修复登录页中英混用 + 搜索栏溢出,更新品牌口号并支持后台配置 2026-03-03 20:41:37 -08:00
mobile fix(branding): 统一Logo色调与App主色调 #6C5CE7 2026-02-23 18:12:35 -08:00
portal fix(ui): 修复登录页中英混用 + 搜索栏溢出,更新品牌口号并支持后台配置 2026-03-03 20:41:37 -08:00
.gitignore feat: Add Flutter build configuration for admin-app and mobile 2026-02-11 06:22:13 -08:00
build.bat feat: Add Flutter build configuration for admin-app and mobile 2026-02-11 06:22:13 -08:00
build.sh feat: Add Flutter build configuration for admin-app and mobile 2026-02-11 06:22:13 -08:00