docs: 修复实现计划中的问题

- 修改 Redis 错误时 fail-closed(安全策略)
- 添加 Task 7 说明后续封禁 API 的扩展方向
- 添加 go.mod replace 说明

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
zerosaturation 2026-05-14 16:45:31 +08:00
parent a7249110fe
commit 17674e3d54

View File

@ -22,6 +22,8 @@ backend/gateway/middleware/ # 修改JWT 中间件检查黑名单
backend/gateway/main.go # 修改:初始化 Redis
```
> **注意:** gateway 的 go.mod 使用 `replace github.com/topfans/backend => ../`,因此 `github.com/topfans/backend/pkg/database` 映射到 `backend/pkg/database/`
---
### Task 1: 创建 Redis 客户端和 Token 黑名单模块
@ -302,11 +304,14 @@ Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>"
// 4. 检查 Token 是否在黑名单
isBlacklisted, bannedUserID, banReason, err := database.IsBlacklisted(c.Request.Context(), token)
if err != nil {
logger.Logger.Error("Failed to check blacklist",
// Redis 错误时 fail-closed安全策略拒绝请求
logger.Logger.Error("Failed to check blacklist, rejecting request for security",
zap.String("path", c.Request.URL.Path),
zap.Error(err),
)
// Redis 错误时fail-open允许请求继续可根据安全策略调整
response.Unauthorized(c, "认证服务异常,请稍后重试")
c.Abort()
return
}
if isBlacklisted {
logger.Logger.Warn("Token is blacklisted",
@ -365,6 +370,47 @@ Expected: 编译成功,无错误
---
### Task 7: 添加封禁用户的 Admin API后续扩展
> **说明:** 此任务为后续扩展任务本次实现暂不包含。Token 黑名单的基础设施已建立,后续需要封禁用户时调用 `database.AddToBlacklist` 即可。
**Files:**
- Modify: `backend/gateway/controller/admin_controller.go`(新建或修改)
- Modify: `backend/gateway/router/router.go`
**API 设计:**
```
POST /api/v1/admin/ban
Authorization: Bearer {admin_token}
Content-Type: application/json
Request:
{
"user_id": 123,
"token": "user_jwt_token_to_ban",
"reason": "违规发言"
}
Response:
{
"code": 200,
"message": "ok"
}
```
**调用示例:**
```go
// 计算 Token 剩余 TTL
ttl := jwt.GetExpiresIn() * time.Second
// 添加到黑名单
err := database.AddToBlacklist(ctx, token, userID, reason, ttl)
```
---
## 变更记录
| 日期 | 变更内容 |