docs: 完成任务 #104 待验收归档

ila
2026-08-17 11:08:16 +08:00
parent cf0a4c83e9
commit 985be106d6
@@ -1,9 +1,9 @@
# 104 Sense-30天登录有效期
- 类型:需求 / 缺陷 / 重构
- 所属 Epic:#
- 所属 MVP / 版本:#
- 状态:待验收 / 已完成
- 类型:需求
- 所属 Epic:#7
- 所属 MVP / 版本:#8
- 状态:待验收
- 日期:2026-08-17
- Gitea 工单:https://git.ilapage.cn/ila/yovision/issues/104
- Wiki 页面:Task-104-Sense-30天登录有效期
@@ -11,32 +11,56 @@
## 背景与目标
<!-- 原来有什么问题,这次达到什么结果。 -->
Sense 原生产、demo、SQLite 和完整配置默认 JWT 有效期为 3600 秒,前端 Token 使用浏览器会话 Cookie。按用户确认,将默认登录有效期统一调整为固定 30 天,使浏览器重启后在 Token 未过期时仍可保持登录。
## 最终方案
<!-- 说明实际实现。与建单方案不同之处必须写清原因。 -->
- 保留 go-admin JWT 中间件和 go-admin-ui `js-cookie` 封装;非开发模式未显式配置时默认使用 30 天,合法显式配置仍优先,开发模式保持上游行为。
- 生产、demo、SQLite、full 与 Windows 运行时生成配置统一使用 2,592,000 秒。
- `Sense-Admin-Token` Cookie 使用 `expires: 30`;退出登录仍删除 Cookie。
- 不是滑动续期,不增加 Refresh Token、服务端会话表或 Token 黑名单。已有 Token 不自动延长,部署后需重新登录。
- Token 泄露窗口扩大到 30 天;紧急失效需要轮换 JWT secret,这会使全部现有登录失效。
## 修改文件
- `<文件>`:<改动说明>
- `Sense/server/common/middleware/auth.go`、`auth_test.go`:实现并验证默认 30 天 JWT。
- `Sense/server/config/settings*.yml`、`READMEN.md`:统一配置值和示例。
- `Sense/scripts/runtime/sense-common.ps1`、`Sense/tests/package/run-tests.ps1`:统一并验证 Windows 运行时配置。
- `Sense/ui/src/utils/auth.js`、`Sense/ui/tests/unit/utils/auth.spec.js`:持久化 Cookie 30 天并验证设置、读取和删除。
- `docs/02-architecture-and-code-map.md`、`docs/04-local-development-and-verification.md`、`docs/09-product-requirements.md`:由 Wiki 同步的长期文档镜像。
## 验收结果
| 验收标准 | 结果 |
|---|---|
| | 通过 / 未通过 |
| 非开发模式签发 JWT 的到期时间为签发后 30 天 | 通过 |
| Token Cookie 使用 30 天持久化期限,退出仍删除 | 通过 |
| 所有运行配置及 Windows 生成值为 2,592,000 秒 | 通过 |
| Go、Vue、Windows 包测试与 PostgreSQL 启动回归 | 通过 |
| ZIP 仅含模板配置,不包含现场秘密或数据 | 通过 |
| 已有 Token 不自动延长并记录重新登录要求 | 通过 |
## 测试
- 执行命令:`<命令>`
- 结果:
- **未验证部分**:<!-- 必填;没有就写“无”。 -->
- `go test ./...`:通过。
- `go vet ./...`:通过。
- `go build ./...`:通过。
- `pnpm run lint`:0 error,32 条上游既有 warning。
- `pnpm exec vue-cli-service test:unit --runInBand`:18 suites、48 tests 通过。
- `Sense/tests/package/run-tests.bat -PackageRoot Sense/dist/sense-windows-amd64`:22 assertions 通过。
- Windows amd64 生产构建、资源审计、包审计:通过;4 条既有构建 warning。
- 独立 #104 包使用现场 PostgreSQL 完成迁移和启动,`127.0.0.1:18080` 监听成功,生成配置确认 `timeout: 2592000`。
- 包:`Sense/dist/sense-windows-amd64-104.zip`,56,457,546 bytes,SHA-256 `BCE3EDD3F5BD79C75A953CB7673D1C9867CE3BB89755D6A188C7CA1226D05CE3`,来源提交 `adc227f110bf0c456d1523eac151ed1d8360cc83`。
- 一次错误的 Vue 测试参数把 `--runInBand` 识别为模式而未找到测试,已改用正确命令并通过;一次临时运行数据恢复把日志目录复制成同名文件,修正验证环境后从失败点重试并通过,均非产品代码缺陷。
- **未验证部分**:无法用真实等待 30 天验证自然到期;以固定时钟 JWT 测试和 Cookie 参数单测覆盖。实际浏览器关闭/重开由人工验收确认。#104 独立包不包含仍待验收的 #101;两项进入 `dev` 后才能生成最终组合包。
## 遗留问题
<!-- 没有就删除本节。 -->
- 当前服务已恢复为用户原有的 #101 验证包,避免应用外壳回退;#104 独立包保留为具名 ZIP,未覆盖当前标准包。
- 当前架构没有服务端单 Token 撤销能力,这是确认范围内的安全限制。
## 相关提交
- `<提交哈希>` <提交说明>
- `857ba45` feat: 将 Sense 登录有效期调整为30天 (#104)
- `a843121` docs: 记录 Sense 30天登录有效期 (#104)
- `adc227f` test: 验证 Sense 30天 JWT 到期时间 (#104)