jim800121chen 9ebf46112b feat(visionA-frontend): AuthGuard — 未登入自動導 /login + 記住原本 path
需求:
  使用者未登入訪 protected route(如 /conversion、/devices)→ 卡在空 UI、無 redirect。
  使用者反映「希望未登入直接跳登入頁、登入完跳回原本要去的頁」。

實作:
  - 新增 src/components/auth-guard.tsx:
    * public routes allowlist:/login, /register
    * protected route + user=null + hydrate 完成 → router.replace('/login?next=<path>')
    * hydrate 進行中 → render null(避免閃過 protected UI)
    * buildNextParam helper:排除 public routes 和純 / 路徑

  - 改 src/app/layout.tsx:
    * 用 <Suspense fallback={null}> 包 AuthGuard(next/navigation useSearchParams 規範)
    * AuthGuard 包 AppShell

  - 改 src/app/login/page.tsx:
    * buildLoginUrl 接受 returnTo param、組進 backend `/api/auth/login?return_to=<path>`
    * sanitizeNext helper:對齊 backend oidc_auth.go:382 sanitizeReturnTo("/" 開頭、無 "//"、無 "://")
    * 已登入 redirect:從 query ?next= 跳該 path(不再固定 /)

  - 改 src/app/login/login.test.tsx:
    * mock 補 useSearchParams(next/navigation mock 既有只 mock useRouter)

  - backend oidc_auth.go:88 sanitizeReturnTo 已支援 return_to query param、無需改 backend code

驗證:
  - tsc --noEmit 0 errors
  - pnpm lint 0 errors
  - pnpm build 通過(13 pages prerendered)
  - login.test.tsx 12/12 pass
  - stage deploy verify:SSR HTML 含 AuthGuard component bundle

不在本 commit 範圍:
  - .env.stage CORS fix(VISIONA_CORS_ALLOWED_ORIGINS、stage host .env 直接改、不進 git)
  - 5/16 deploy script typo fix(已在 commit fad17dd)
  - converter multipart field mismatch(converter scheduler 跨 repo 處理)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-18 10:38:16 +08:00

visionA

Innovedus visionA monorepo — Edge AI 開發平台(離線版 + 雲端版)。

開發環境快速啟動

make dev-up         # 起 backend + Member CenterOIDC+ Postgres
make frontend-dev   # 另開 terminal起 frontend dev serverpnpm dev
# 開瀏覽器 http://localhost:3000

完整流程(含 OAuth client 手動註冊、port 對照、疑難排解)見 docs/DEV-SETUP.md。 其他 targetmake help

子專案

專案 角色 狀態
local-tool/ 離線版 桌面工具Wails + Go + Next.js 穩定維護
visionA-frontend/ 雲端版 web 前端Next.js Phase 0 雛形
visionA-backend/ 雲端版後端Go雙 binaryapi-server + remote-proxy Phase 0 雛形
local-agent/ visionA Agent — 雲端版 local 端代理Wails + Go + Next.js Phase 0.5 雛形

架構關係

離線模式local-tool 單獨)
  使用者瀏覽器 → localhost:3721 (local-tool server) → Kneron 裝置

雲端模式visionA 雲端版 + visionA Agent
  使用者瀏覽器 → visionA-frontend (CDN) → visionA-backend (api-server)
                                                ↓ internal HTTP
                                       visionA-backend (remote-proxy)
                                                ↓ WebSocket + yamux tunnel
                                       使用者電腦上的 visionA Agent
                                                ↓ 本機 HTTP
                                       Agent 的內部 server → Kneron 裝置

兩種模式可在同一台電腦共存local-tool 和 visionA Agent 獨立安裝、不衝突)。

產品線原則

  1. local-tool 不動,需要時 fork
  2. 雲端 vs 本機差異只在前端部署位置
  3. 雲端 agent 的 server ≈ local-tool 的 server(差別在沒本機操作 UI
  4. 雲端 web UI 先抄 local-tool,之後再加新功能

文件

完整產品文件見 .autoflow/

License

TBD內部使用

Description
No description provided
Readme 120 MiB
Languages
Go 54.6%
TypeScript 33.4%
Python 3.8%
Makefile 1.8%
JavaScript 1.8%
Other 4.6%