rwadurian/frontend/mining-app/lib/core
hailin 97f8b7339f fix(auth): LOGIN 能力禁用后强制下线已登录用户
## 问题
管理员在后台禁用用户的 LOGIN 能力后,该用户仍然可以正常使用 mining-app。
原因是 LOGIN 检查只在登录/刷新 token 时执行,已持有有效 JWT(7天有效期)
的用户不会被影响,直到 token 过期才会被拦截。

## 修复

### 后端 - JwtAuthGuard (auth-service)
- 在 JWT 验证通过后,增加 LOGIN 能力实时检查
- 调用 CapabilityService.isCapabilityEnabled() 查询 Redis 缓存
- LOGIN 被禁用时返回 403 ForbiddenException("您的账户已被限制登录")
- 采用 fail-open 策略:Redis/DB 查询失败时放行,不影响正常用户
- 每次认证请求多一次 Redis GET(<1ms),对当前用户规模无性能影响

### 前端 - mining-app API Client
- 新增 onLoginDisabled 全局回调(类似现有的 onUnauthorized)
- Dio 拦截器检测 403 响应中包含"限制登录"关键词时触发回调
- 回调执行:清除用户状态 + 跳转登录页(与 401 处理一致)

## 影响范围
- 所有使用 @UseGuards(JwtAuthGuard) 的端点都会实时检查 LOGIN 能力
- 管理员禁用 LOGIN 后,用户下一次 API 请求即被拦截并强制下线
- 不影响公开端点(登录、注册等不经过 JwtAuthGuard 的接口)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 05:01:37 -08:00
..
config feat: 2.0 API 域名从 rwaapi.szaiai.com 迁移到 mapi.szaiai.com 2026-02-01 21:58:03 -08:00
constants feat(frontend): 添加全局深色模式支持 2026-01-19 19:08:03 -08:00
di fix(admin): correct distributed shares calculation to use 2M pool 2026-01-16 08:59:46 -08:00
error feat(capability): 实现用户能力权限控制系统(Capability-based Permission) 2026-02-27 22:19:56 -08:00
network fix(auth): LOGIN 能力禁用后强制下线已登录用户 2026-02-28 05:01:37 -08:00
router feat(trade-password): 实现卖出交易的支付密码验证功能 2026-02-05 18:12:39 -08:00
telemetry feat: 集成 mining-app 升级和遥测功能,扩展 mobile-upgrade 支持多应用 2026-01-28 20:03:26 -08:00
updater feat: 2.0 API 域名从 rwaapi.szaiai.com 迁移到 mapi.szaiai.com 2026-02-01 21:58:03 -08:00
utils feat(mining-app): 已销毁量去掉小数位显示 2026-02-13 07:47:05 -08:00