## 问题 管理员在后台禁用用户的 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> |
||
|---|---|---|
| .. | ||
| .claude | ||
| api-gateway | ||
| infrastructure | ||
| mpc-system | ||
| scripts | ||
| services | ||
| .env.windows | ||
| docker-compose.windows.yml | ||