fix(fam-ui): 未登录自动跳转 OIDC + 登录/退出入口,打通 smart-camera 登录
This commit is contained in:
19
PROGRESS.md
19
PROGRESS.md
@@ -522,3 +522,22 @@ AI 分析瓶颈: 帧5耗时 229s (疑似 ARM CPU 热降频), 其余帧 50-65s
|
||||
2. `.env` 里 `AUTH_HUB_*` 是裸赋值(无 `export`),`source` 后不进环境,gunicorn 子进程读不到 → 登录一直 503 fail-closed(与之前“生产未部署”一致)。脚本加 `set -a` 包裹 source 修复。
|
||||
|
||||
**验证**:`smart-camera.zichuan.xyz/` 200、`/login` 302→auth.zichuan.xyz(redirect_uri=smart-camera)、`/api/*` 401;`oracle.zichuan.xyz/` 404、`/fam` 200;`api.zichuan.xyz` 已不通。fam-core 经修复脚本重启后 health ok。
|
||||
|
||||
## SPA 登录打通:未登录自动跳转 OIDC(2026-09-01)
|
||||
|
||||
**问题**:域名收口后访问 `https://smart-camera.zichuan.xyz/timeline` 显示「⚠ 未登录 / 登陆不了啊」。后端 `/login`(302→auth-hub)与 Caddy `/login` 反代此前已验证可用,根因在**前端零登录逻辑**:`fam-ui` 调 `/api/*` 拿到 401 后只在页面上渲染字面错误 `data.error`("未登录"),从不发起 OIDC 跳转,也没有任何登录入口。
|
||||
|
||||
**改动(本仓库 `fam-ui/`)**:
|
||||
- `src/api.js` `request()`:捕获 401 时 `window.location.href = '/login'` 触发统一登录(后端经 auth-hub 走 Authorization Code + PKCE);用模块级 `_redirectingToLogin` 开关保证单次会话只跳一次,并 `return new Promise(()=>{})` 阻止调用方继续渲染错误态;`/api/auth/check` 等白名单接口不会 401,不受影响。
|
||||
- `src/api.js` `api` 对象新增 `authCheck: () => request('/api/auth/check')`。
|
||||
- `src/App.vue`:`onMounted` 调 `api.authCheck()` 维护 `authed` 状态;左侧栏 + 移动端顶栏新增「🔑 登录」入口(`<a href="/login">`)与「👋 退出登录」按钮(`POST /api/logout` 后回 `/` 由后端 401 自动跳登录)。
|
||||
|
||||
**部署**:`npm run build` → `dist/` 经 `tar | ssh ubuntu@129.146.26.249` 覆盖 `/var/www/fam-ui`(macOS `._*` 元数据已清)。
|
||||
|
||||
**端到端验证**:
|
||||
- `smart-camera.zichuan.xyz/timeline` → 200(SPA)
|
||||
- `/login` → 302 → `auth.zichuan.xyz/authorize?...&redirect_uri=https://smart-camera.zichuan.xyz/api/auth/callback`
|
||||
- `/api/auth/check`(无 cookie)→ `{"authed":false}`(白名单,不 401)
|
||||
- `/api/ui/videos`(无 cookie)→ 401 → 前端据此自动跳 `/login`
|
||||
|
||||
登录链路已通:未登录访问任意页面 → 首个 401 → 自动跳 auth-hub 登录 → 回调种 `fam_session` cookie → 回 `/timeline` 正常加载。
|
||||
|
||||
Reference in New Issue
Block a user