fix login cors deployment config
This commit is contained in:
@@ -71,6 +71,8 @@
|
||||
|
||||
- `NEXT_PUBLIC_API_BASE_URL` 若误配为 loopback(`127.0.0.1/localhost`),前端运行时会在浏览器端自动改写为“当前页面主机 + 同端口(默认 8000)”,避免公网页面触发 PNA(Private Network Access)阻断。
|
||||
- 认证请求与 WebSocket 连接均统一复用该运行时 API 基址解析逻辑。
|
||||
- `NEXT_PUBLIC_API_BASE_URL` 必须只配置“协议 + 主机 + 可选端口”,不要额外带 `/api` 前缀;当前前端请求路径已自行拼接 `/api/v1/...`,若环境变量写成 `https://host/api` 会落成 `/api/api/v1/...`。
|
||||
- 通过 IP:3000 直接访问站点时,后端 `API_CORS_ORIGINS` 必须显式包含该页面 origin(例如 `http://223.109.142.84:3000`);仅放行正式域名会导致浏览器在登录预检阶段返回 `Disallowed CORS origin`。
|
||||
|
||||
## 前端构建稳定性口径(2026-04-13)
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ MINIO_CONSOLE_PORT=9001
|
||||
API_PORT=8000
|
||||
FLOWER_PORT=5555
|
||||
|
||||
NEXT_PUBLIC_API_BASE_URL=https://quiz.example.com/api
|
||||
NEXT_PUBLIC_API_BASE_URL=https://quiz.example.com
|
||||
NEXT_PUBLIC_APP_BASE_PATH=/fl
|
||||
CELERY_LOG_LEVEL=INFO
|
||||
CELERY_WORKER_CONCURRENCY=4
|
||||
|
||||
@@ -23,3 +23,27 @@
|
||||
- 风险与关注点:
|
||||
- GitHub 仓库需预先配置 `REGISTRY_USERNAME` / `REGISTRY_PASSWORD` Secrets,否则构建登录阶段会失败。
|
||||
- 若未来镜像仓库或命名空间变化,只需更新仓库 Variables `REGISTRY` / `REGISTRY_NAMESPACE`,无需再改工作流逻辑。
|
||||
|
||||
## Work Log - 登录接口跨域拦截定位与修复(2026-05-16)
|
||||
|
||||
- 背景:
|
||||
- 用户反馈 `http://223.109.142.84:3000/fl` 可打开,但登录时报错。
|
||||
- 现场前端 bundle 实际将 API 基址写死为 `http://127.0.0.1:8000`,运行时会改写为当前主机 `223.109.142.84:8000`。
|
||||
- 在线 `api` 容器实际运行于另一份部署目录 `/opt/fquiz/deploy/pro-deploy`,其 `API_CORS_ORIGINS` 仅允许 `https://quiz.example.com`。
|
||||
|
||||
- 本次改动:
|
||||
- `/opt/git/fquiz/deploy/pro-deploy/.env`
|
||||
- 将 `NEXT_PUBLIC_API_BASE_URL` 从 `https://quiz.example.com/api` 修正为 `https://quiz.example.com`,避免未来重发版后前端把接口拼成 `/api/api/v1/...`。
|
||||
- 在线部署 `/opt/fquiz/deploy/pro-deploy/.env.prod`
|
||||
- 将 `API_CORS_ORIGINS` 调整为 `https://quiz.example.com,http://223.109.142.84:3000`。
|
||||
- 使用现有镜像强制重建 `api` 容器,使新的 CORS 白名单立即生效。
|
||||
|
||||
- 验证:
|
||||
- `curl -i http://127.0.0.1:8000/health` 返回 `200 OK`。
|
||||
- `curl -i -X OPTIONS http://127.0.0.1:8000/api/v1/auth/login -H 'Origin: http://223.109.142.84:3000' -H 'Access-Control-Request-Method: POST'`
|
||||
返回 `200 OK`,且响应头包含 `access-control-allow-origin: http://223.109.142.84:3000`。
|
||||
- `curl -i -X POST http://127.0.0.1:8000/api/v1/auth/login -H 'Origin: http://223.109.142.84:3000' -H 'Content-Type: application/json' --data '{"user_id":"admin","password":"wrong-password"}'`
|
||||
返回 `401 Unauthorized`,同时保留 `access-control-allow-origin: http://223.109.142.84:3000`,说明跨域链路已打通,剩余仅取决于账号密码本身。
|
||||
|
||||
- 风险与关注点:
|
||||
- 在线 `api` 仍配置 `REFRESH_COOKIE_SECURE=true`;若继续通过纯 HTTP IP 访问,刷新 token cookie 可能不会被浏览器持久化。短期内不影响本次“登录预检被拦截”的修复,但后续若要稳定保留登录态,建议切到 HTTPS 域名访问,或在明确接受风险的前提下改为 `false`。
|
||||
|
||||
Reference in New Issue
Block a user