用户反馈
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。
代码静态扫描结果
后端代码路径
backend/src/routes/public.ts:953 — POST /api/review 调用 verifyTongjiCaptcha(turnstile_token, c.env.CAPTCHA_SITEVERIFY_URL)
backend/src/routes/public.ts:1059 — PUT /api/review/:id 同样调用上述验证
backend/src/helpers/captcha.ts:3 — verifyTongjiCaptcha 函数:
const raw = String(siteverifyUrl || '').trim()
if (!raw) return false // ← 空 URL 直接返回 false,触发 403
backend/src/helpers/types.ts:3 — CAPTCHA_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 反馈群
用户反馈
用户在 dev 测试站点(jcourse-backend-dev)提交课程评价(POST /api/review)时,后端返回 403 {"error": "人机验证无效或已过期"}。该错误发生在每次评论提交时,非偶发。
意图判断
去重检查
已查询 Serverless 仓库全部 100+ issues,未发现语义重复的 open/closed issue。
代码静态扫描结果
后端代码路径
backend/src/routes/public.ts:953— POST /api/review 调用verifyTongjiCaptcha(turnstile_token, c.env.CAPTCHA_SITEVERIFY_URL)backend/src/routes/public.ts:1059— PUT /api/review/:id 同样调用上述验证backend/src/helpers/captcha.ts:3—verifyTongjiCaptcha函数:backend/src/helpers/types.ts:3—CAPTCHA_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等 secretCAPTCHA_SITEVERIFY_URL环境变量,导致该 secret 未被写入 dev 环境的后端 Workerc.env.CAPTCHA_SITEVERIFY_URL为 undefined,verifyTongjiCaptcha返回 false,所有评论提交均被拒绝对比
backend/.dev.vars(本地开发配置):本地开发有配置,但 CI dev 部署缺失。
Proposed Fix
在
.github/workflows/deploy-backend-dev.yml中添加:同时建议在
backend/wrangler.toml的 dev env 注释中也补充说明需要设置此 secret。Reporter: 7 (QQ: 1798106406)
来源: QQ 反馈群