fix(deploy): /api/* 与 /internal/* 显式 run_worker_first,修 OAuth 回调被 SPA 资源层截胡

compatibility_date >= 2025-04-01 隐式开启 assets_navigation_prefers_asset_serving:
浏览器【导航请求】不进入 Worker,直接由 SPA 资源层返回 index.html。
/api/oauth/cloudflare/callback 是浏览器跨站重定向的落点(导航请求),于是被截胡 ——
前端在无匹配路由的路径上 hydrate,渲染 React Router 的 404 页面;后端 state 完全没被消费,
表现为「Cloudflare 授权成功,回调却毫无反应」。

用 run_worker_first 路径数组(而非 true),静态资源仍走 asset-first 快路径。

- 新增 tests/deploy_config.test.ts 锁住这条部署配置(此类问题只在生产出现)
- 线上复验:导航请求打回调现在返回 Worker 的 400,不再是 200 index.html;/accounts 仍返回 SPA
This commit is contained in:
bigcode
2026-09-30 17:10:57 +08:00
parent 5b887908e2
commit 2ce8a24707
3 changed files with 79 additions and 2 deletions
+8 -1
View File
@@ -13,7 +13,14 @@
"assets": {
"directory": "./public",
"binding": "ASSETS",
"not_found_handling": "single-page-application"
"not_found_handling": "single-page-application",
// 必须显式让 /api/* 先走 Worker:compatibility_date >= 2025-04-01 会隐式开启
// assets_navigation_prefers_asset_serving,浏览器【导航请求】不进 Worker 而直接拿 index.html。
// 那样 /api/oauth/cloudflare/callback 这个浏览器重定向落点会被 SPA 资源层截胡,
// 前端在没有匹配路由的路径上 hydrate,渲染成 React Router 的 404 页面 ——
// 表现为「Cloudflare 授权明明成功,回调却毫无反应」,后端 state 都没被消费。
// 用数组(而不是 true)可让静态资源保持 asset-first 快路径,不为每个资源文件多付一次 Worker 调用。
"run_worker_first": ["/api/*", "/internal/*"]
},
"routes": [
// 自定义域名:wmailhub.adx9.com(CF 自动创建 DNS 记录并签发证书)