fix(viral-video): 预设音色改用 voices/presets(带Bearer Token)+ 清理analyze-images冗余参数 #2128

Merged
xiaoxia merged 1 commits from fix/2041-preset-voice-auth into develop 2026-10-01 19:34:18 +08:00
Owner

问题1:GET /api/v1/tts/presets 返回 401

  • 根因:ViralVideoPage 里用原生 fetch("/api/v1/tts/presets", {credentials:"include"}) 直接请求,没有注入 Authorization: Bearer token header。
  • 后端 /tts/presets 路由有 _user: AuthenticatedUser = Depends(get_current_user) 依赖鉴权(必须 Bearer token),cookie-only 请求被拒。
  • 修复:改用 fetchPresetVoices() from @/api/voices(走统一 apiClient,自动带 Bearer token),命中 /voices/presets 接口(后端注释:「不需要认证」且返回更丰富字段:preview_url/tags/description)。
  • 接口失败兜底改为 setPresetVoices([]),让 PresetVoicePickerModal 使用内置 MOCK_VOICES 兜底展示,不再请求错误路径。
  • 字段映射:voice_id/name/description/tags/preview_url → PresetVoice 结构(sample_audio_url 接 preview_url,支持试听)。

问题2:analyze-images 500 —— 前端Payload核查

  • 前端调用路径:apiClient.post("/viral-video/analyze-images", payload) ✅ 走Bearer
  • 实际发送字段(JSON.stringify后不会有undefined字段):
    • images: string[](仅过滤 i.ossUrl && !i.uploading 的已上传图片,映射为OSS URL字符串数组)✅
    • reference_video_url: refVideo.ossUrl | 不发(undefined)✅
    • style_strength: refVideo存在时发 "light"|"medium"|"strict",否则不发 ✅
  • 清理了冗余 style_template_id: refVideo? undefined : undefined(永远是undefined),JSON.stringify不会带
  • images 数组中不包含 blob:/本地 URL(handleAnalyzeImages 有 images.some(i.uploading) 的上传中拦截),都是真实 OSS URL。
  • 500 不是前端payload结构问题;可能是后端 Celery worker 未启动 / VLM 服务不可达 / OSS URL 签名失效;建议后端查 worker 日志。

验证

  • tsc ✅ / vite build ✅ / prettier ✅
## 问题1:GET /api/v1/tts/presets 返回 401 - 根因:ViralVideoPage 里用原生 fetch("/api/v1/tts/presets", {credentials:"include"}) 直接请求,**没有注入 Authorization: Bearer token header**。 - 后端 /tts/presets 路由有 `_user: AuthenticatedUser = Depends(get_current_user)` 依赖鉴权(必须 Bearer token),cookie-only 请求被拒。 - 修复:改用 `fetchPresetVoices()` from @/api/voices(走统一 apiClient,自动带 Bearer token),命中 `/voices/presets` 接口(后端注释:「不需要认证」且返回更丰富字段:preview_url/tags/description)。 - 接口失败兜底改为 setPresetVoices([]),让 PresetVoicePickerModal 使用内置 MOCK_VOICES 兜底展示,不再请求错误路径。 - 字段映射:voice_id/name/description/tags/preview_url → PresetVoice 结构(sample_audio_url 接 preview_url,支持试听)。 ## 问题2:analyze-images 500 —— 前端Payload核查 - 前端调用路径:`apiClient.post("/viral-video/analyze-images", payload)` ✅ 走Bearer - 实际发送字段(JSON.stringify后不会有undefined字段): - images: string[](仅过滤 `i.ossUrl && !i.uploading` 的已上传图片,映射为OSS URL字符串数组)✅ - reference_video_url: refVideo.ossUrl | 不发(undefined)✅ - style_strength: refVideo存在时发 "light"|"medium"|"strict",否则不发 ✅ - 清理了冗余 `style_template_id: refVideo? undefined : undefined`(永远是undefined),JSON.stringify不会带 - images 数组中不包含 blob:/本地 URL(handleAnalyzeImages 有 images.some(i.uploading) 的上传中拦截),都是真实 OSS URL。 - 500 不是前端payload结构问题;可能是后端 Celery worker 未启动 / VLM 服务不可达 / OSS URL 签名失效;建议后端查 worker 日志。 ## 验证 - tsc ✅ / vite build ✅ / prettier ✅
xiaoxia added 1 commit 2026-10-01 19:34:11 +08:00
fix(viral-video): 预设音色改用 voices/presets 接口(带Bearer Token),清理analyze-images冗余参数
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 1s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 2s
CI/CD Pipeline / Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build API Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 2m0s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 1m58s
PR Automation / Auto Approve on CI Green (pull_request) Failing after 2m8s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 2m16s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 2m48s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 3m50s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 3m55s
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
PR Automation / Auto Merge on CI Green + Approved (pull_request) Has been skipped
AI Code Review / AI Code Review (pull_request) Successful in 7m27s
CI/CD Pipeline / Validate - Style (pull_request) Successful in 14m25s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 20m5s
CI/CD Pipeline / Validate - Security (pull_request) Successful in 38m56s
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / CI Gate (pull_request) Successful in 2s
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
f7a983997c
xiaoxia merged commit 522668006f into develop 2026-10-01 19:34:18 +08:00
xiaoxia deleted branch fix/2041-preset-voice-auth 2026-10-01 19:34:24 +08:00
auto-approve-bot reviewed 2026-10-01 19:36:21 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。

🗑️ 预览环境已清理

PR #2128 已关闭或合并,对应的预览环境已被清理。

如有需要,可以重新打开 PR 来重新生成预览环境。

🗑️ **预览环境已清理** PR #2128 已关闭或合并,对应的预览环境已被清理。 > 如有需要,可以重新打开 PR 来重新生成预览环境。

🚀 预览环境已部署

项目 详情
PR号 #2128
预览链接 https://pr-2128.preview.xiaoxiajianji.com
API环境 staging

💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。

🔄 每次提交新代码后预览环境会自动更新。

🗑️ PR 关闭或合并后,预览环境会自动清理。

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #2128 | | 预览链接 | [https://pr-2128.preview.xiaoxiajianji.com](https://pr-2128.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
Sign in to join this conversation.