fix(fam-core): 登录密码不再硬编码兜底(fail-closed) + 会话有效期改 2 小时
之前 FAM_AUTH_USER/FAM_AUTH_PASS 没配置时会退回代码里写死的 ericwyuan/ iLoveJava5——这两个值跟 NAS SSH 密码是同一个,且这个登录页已经通过 frp 暴露在 公网上。.env 万一没配置好(这个项目里已经发生过好几次"忘了 source .env"的 情况),公网入口就会用一个和 SSH 密码相同、且写在源码里的已知密码兜底,双重 风险叠一起。 现在改成 fail-closed:FAM_AUTH_USER/FAM_AUTH_PASS 只要有一个没配置,直接拒绝 所有登录(打一条 ERROR 日志提醒去配 .env),不再有任何硬编码默认值。 会话有效期从 7 天改成 2 小时(按用户要求)。 新增 test_auth.py 11 个用例覆盖:未配置时 fail-closed、正确/错误凭据校验、 只配了一半也要拒绝、session 过期判定、白名单路径匹配。 已实测验证:当前 .env 里 FAM_AUTH_USER/PASS 仍是配置好的(还是 ericwyuan/ iLoveJava5,这个值本身没改——只是不再硬编码在代码里,运维如果想换成不同于 SSH 的密码,现在改 .env 就行,不用改代码),登录/拒绝错误密码都验证正常, cookie Max-Age=7200 确认生效。
This commit is contained in:
@@ -295,7 +295,7 @@ chat_history 独立表(问答上下文摘要留存)
|
||||
| 端点 | 方法 | 说明 |
|
||||
|------|------|------|
|
||||
| `/health` | GET | 服务健康(**免登录**) |
|
||||
| `/api/login` | POST | 登录:`{"username","password"}` → 校验 `FAM_AUTH_USER`/`FAM_AUTH_PASS`(默认 `ericwyuan`/`iLoveJava5`,NAS `.env` 可改)→ 种 HttpOnly cookie `fam_session`(7 天) |
|
||||
| `/api/login` | POST | 登录:`{"username","password"}` → 校验 `FAM_AUTH_USER`/`FAM_AUTH_PASS`(NAS `.env` 配置,无硬编码默认值,未配置则拒绝所有登录)→ 种 HttpOnly cookie `fam_session`(2 小时) |
|
||||
| `/api/logout` | POST | 退出登录(清 cookie) |
|
||||
| `/api/auth/check` | GET | 登录态检查:`{"authed": true\|false}`(**免登录**) |
|
||||
| `/api/status` | GET | Oracle-Sync + MotionNotifier 状态(sync running/cursor;motion poll_enabled/pushed_total/heartbeat) |
|
||||
@@ -512,7 +512,7 @@ task_id=289(30s 测试片段)全链路打通:推送 5.7MB → Edge 分析
|
||||
> - `3000` → NAS Gitea、`8500` → NAS WordPress(8088)、**`8000` → NAS FAM-Core(本系统)**
|
||||
> - 外网入口 `http://129.146.203.203:8000`,**需登录**(见 §5.2 `/api/login`)
|
||||
>
|
||||
> **登录校验(2026-08-22)**:FAM-Core 全站拦截(`auth.py`)——页面未登录 302 `/login`(内置深色登录页,SPA 零改动),`/api/*` 未登录 401;凭据 `FAM_AUTH_USER`/`FAM_AUTH_PASS`(NAS `.env`,默认 `ericwyuan`/`iLoveJava5`);白名单免登录:`/login` `/api/login` `/api/logout` `/api/auth/check` `/health` `/api/ss/webhook` `/assets/*`。登录态为进程内 token + HttpOnly cookie(7 天),重启 fam-core 需重新登录。
|
||||
> **登录校验(2026-08-22 新增,2026-08-23 改为 fail-closed)**:FAM-Core 全站拦截(`auth.py`)——页面未登录 302 `/login`(内置深色登录页,SPA 零改动),`/api/*` 未登录 401;凭据 `FAM_AUTH_USER`/`FAM_AUTH_PASS`(NAS `.env` 配置,**无硬编码默认值**——这两个变量跟 NAS SSH 密码是同一个值,公网入口不能有"没配置就退回已知密码"的兜底,`.env` 没配好这两项时直接拒绝所有登录);白名单免登录:`/login` `/api/login` `/api/logout` `/api/auth/check` `/health` `/api/ss/webhook` `/assets/*`。登录态为进程内 token + HttpOnly cookie(**2 小时**),过期或重启 fam-core 需重新登录。
|
||||
|
||||
> Oracle 部署方式:本地 git 提交 push Gitea → tar 管道到 `/opt/fam-edge`(`--strip-components=1` 解临时目录再 cp,避免动 data/venv/gdrive_videos)。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user