From cf8a64528c272cd4493dea8b7ab74cc73d722f2d Mon Sep 17 00:00:00 2001 From: IanShaw <131567472+IanShaw027@users.noreply.github.com> Date: Sat, 27 Dec 2025 10:50:15 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20Gemini=20API=20?= =?UTF-8?q?=E8=AE=A4=E8=AF=81=E5=92=8C=20/responses=20=E7=AB=AF=E7=82=B9?= =?UTF-8?q?=E8=B7=AF=E7=94=B1=E9=97=AE=E9=A2=98=20(#45)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(middleware): 修复 Gemini API Key 认证中间件用户上下文类型错误 修复了 ApiKeyAuthWithSubscriptionGoogle 中间件中设置用户上下文时的类型错误。 **问题:** - 中间件直接设置 `apiKey.User` 对象到上下文 - 导致 handler 中获取 `AuthSubject` 时类型断言失败 - 所有 Gemini v1beta 端点返回 500 "User context not found" **修复:** - 改为设置 `AuthSubject` 结构体,与 `api_key_auth.go` 保持一致 - 添加 `ContextKeyUserRole` 设置以完整支持角色检查 **影响范围:** - Gemini v1beta API 端点 (generateContent, streamGenerateContent) - 使用 Google API Key 认证的所有请求 **测试:** - 验证 Gemini CLI 调用成功返回 200 - 确认用户上下文正确传递到 handler * fix(web): 修复 /responses 端点被前端中间件拦截的问题 - 将 /responses 路径添加到 API 白名单,防止其被当作前端路由处理 - 修复 /responses 端点返回 HTML 而非 API 响应的 BUG - 解决 codex CLI stream 在远程服务器上断开连接的问题 根本原因: 在 6c469b4 提交中添加了 /responses 路由,但未同步更新前端嵌入中间件 的 API 白名单,导致该路由被拦截并返回 index.html 而非 API 响应。 --- backend/internal/server/middleware/api_key_auth_google.go | 6 +++++- backend/internal/web/embed_on.go | 3 ++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/backend/internal/server/middleware/api_key_auth_google.go b/backend/internal/server/middleware/api_key_auth_google.go index 7cef27a6..e37b389e 100644 --- a/backend/internal/server/middleware/api_key_auth_google.go +++ b/backend/internal/server/middleware/api_key_auth_google.go @@ -81,7 +81,11 @@ func ApiKeyAuthWithSubscriptionGoogle(apiKeyService *service.ApiKeyService, subs } c.Set(string(ContextKeyApiKey), apiKey) - c.Set(string(ContextKeyUser), apiKey.User) + c.Set(string(ContextKeyUser), AuthSubject{ + UserID: apiKey.User.ID, + Concurrency: apiKey.User.Concurrency, + }) + c.Set(string(ContextKeyUserRole), apiKey.User.Role) c.Next() } } diff --git a/backend/internal/web/embed_on.go b/backend/internal/web/embed_on.go index 62f1069c..4bf46897 100644 --- a/backend/internal/web/embed_on.go +++ b/backend/internal/web/embed_on.go @@ -29,7 +29,8 @@ func ServeEmbeddedFrontend() gin.HandlerFunc { strings.HasPrefix(path, "/v1/") || strings.HasPrefix(path, "/v1beta/") || strings.HasPrefix(path, "/setup/") || - path == "/health" { + path == "/health" || + path == "/responses" { c.Next() return }