Skip to content

bug(ci): dev 环境后端缺少 CAPTCHA_SITEVERIFY_URL secret,导致所有评论提交返回 403 #116

Description

@yzxoi

用户反馈

dev测试站点,发评论时控制台报错 "Failed to load resource: the server responded with a status of 403 ()",页面提示"人机验证无效或已过期"。

用户在 dev 测试站点(jcourse-backend-dev)提交课程评价(POST /api/review)时,后端返回 403 {"error": "人机验证无效或已过期"}。该错误发生在每次评论提交时,非偶发。

意图判断

  • 类型: bug_report
  • 相关仓库: YourTongji/YourTJCourse-Serverless
  • 相关模块: area:backend, area:ci (CI/CD 配置缺失)

去重检查

已查询 Serverless 仓库全部 100+ issues,未发现语义重复的 open/closed issue。

代码静态扫描结果

后端代码路径

  1. backend/src/routes/public.ts:953 — POST /api/review 调用 verifyTongjiCaptcha(turnstile_token, c.env.CAPTCHA_SITEVERIFY_URL)
  2. backend/src/routes/public.ts:1059 — PUT /api/review/:id 同样调用上述验证
  3. backend/src/helpers/captcha.ts:3verifyTongjiCaptcha 函数:
    const raw = String(siteverifyUrl || '').trim()
    if (!raw) return false  // ← 空 URL 直接返回 false,触发 403
  4. backend/src/helpers/types.ts:3CAPTCHA_SITEVERIFY_URL 定义为 string 类型(非可选)

根因:CI/CD 工作流缺少该 secret

.github/workflows/deploy-backend-dev.yml 中:

  • 设置了 ADMIN_SECRET, CREDIT_API_BASE, VITE_CREDIT_API_BASE, CREDIT_JCOURSE_SECRET, JCOURSE_INTEGRATION_SECRET, TURNSTILE_SECRET_KEY, TURNSTILE_SITEVERIFY_URL 等 secret
  • 但缺少 CAPTCHA_SITEVERIFY_URL 环境变量,导致该 secret 未被写入 dev 环境的后端 Worker
  • 当 Worker 运行时 c.env.CAPTCHA_SITEVERIFY_URL 为 undefined,verifyTongjiCaptcha 返回 false,所有评论提交均被拒绝

对比 backend/.dev.vars(本地开发配置):

CAPTCHA_SITEVERIFY_URL=http://localhost:8788/verify

本地开发有配置,但 CI dev 部署缺失。

Proposed Fix

.github/workflows/deploy-backend-dev.yml 中添加:

env:
  # 现有环境变量...
  CAPTCHA_SITEVERIFY_URL: ${{ secrets.CAPTCHA_SITEVERIFY_URL }}

# 在 "Ensure backend secrets" 步骤中添加:
if [ -n "${CAPTCHA_SITEVERIFY_URL:-}" ]; then
  echo "$CAPTCHA_SITEVERIFY_URL" | npx wrangler versions secret put CAPTCHA_SITEVERIFY_URL --env dev
fi

同时建议在 backend/wrangler.toml 的 dev env 注释中也补充说明需要设置此 secret。

Reporter: 7 (QQ: 1798106406)
来源: QQ 反馈群

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:backendBackend / Cloudflare Workerarea:ciCI/CD workflowsbugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions