[SEN] 将默认登录有效期调整为30天 #104

Closed
opened 2026-08-17 10:49:32 +08:00 by ila · 3 comments
Owner

状态

已完成

基本信息

  • 类型:认证安全行为调整
  • 任务类型:单项目独立任务
  • 主项目:Sense
  • 主 agent:Sense agent
  • 所属 Epic:#7
  • 所属 MVP:#8
  • 前置工单:#64、#70、#97、#99(均已验收并合入 dev)
  • 并行关系:允许与待验收 #101 并行;本任务从最新 dev 创建,修改认证超时、前端 Token Cookie、运行时配置和对应测试,不修改 #101 菜单迁移路径。最终集成包必须在两项均合入 dev 后生成。
  • 独立运行:Brain、Bell 均不启动时完成实现和验收。

原始需求与追溯

  • 来源:用户于 2026-08-17提出“登录默认有效期改成30天”。
  • 方案确认:用户于 2026-08-17明确回复“确认,建工单,做”。
  • 只读事实:当前生产、demo、SQLite 和完整配置的 jwt.timeout 均为 3600 秒;Windows 运行时生成的 settings 也固定为 3600 秒;go-admin-ui 的 Sense-Admin-Token 使用 session Cookie,没有持久化天数。
  • 上游参考:冻结 go-admin 与 go-admin-doc 默认配置均为 3600 秒,Sense 在保留上游 JWT 中间件与 js-cookie 封装的前提下做产品级默认值调整。

目标

将 Sense 默认登录有效期统一调整为固定 30 天:后端 JWT 和前端持久化 Token Cookie 使用同一默认周期,浏览器重启后仍可在 Token 未过期时保持登录。

做什么

  • 将非开发模式默认 JWT 有效期统一为 30 天(2,592,000 秒)。
  • 将 go-admin-ui 的 Sense-Admin-Token Cookie 持久化期限设为 30 天。
  • 更新生产、demo、SQLite、完整配置和 Windows 运行时 settings 生成值。
  • 增加后端 JWT 超时、前端 Cookie 参数和运行时生成配置测试。
  • 更新长期认证/配置文档,重建 Windows amd64 包并完成启动和登录回归。
  • 明确已有 Token 不会被自动延长,部署后需要重新登录取得新 Token。

不做什么

  • 不实现滑动续期、Refresh Token、服务端会话表或 Token 黑名单。
  • 不改变密码策略、验证码、RBAC、Cookie 名称、JWT secret、登录接口或审计规则。
  • 不修改 Bell、Brain、contracts、GoAdmin 冻结基线或公共上游参考仓库。
  • 不把真实账号、密码、JWT 或现场配置写入仓库、工单、Wiki 或安装包。

GoAdmin 复用门禁

  • 参考冻结 go-admin-doc docs/guide/xmbs.md 的 jwt.timeout 配置方式。
  • 复用冻结 go-admin common/middleware/auth.go 的 JWT 中间件和 go-admin-ui src/utils/auth.js 的 js-cookie 封装。
  • 只调整 Sense 产品默认值和测试,不替换认证框架。

写路径

  • Sense/server/common/middleware/auth.go
  • Sense/server/common/middleware/*_test.go
  • Sense/server/config/settings*.yml
  • Sense/server/config/READMEN.md(同步上游配置示例,避免继续展示 1 小时)
  • Sense/scripts/runtime/sense-common.ps1
  • Sense/tests/package/**
  • Sense/ui/src/utils/auth.js
  • Sense/ui/tests/unit/**
  • 受影响的 Gitea Wiki 页面及同步生成的 docs/** 镜像
  • 本工单 Wiki 归档、wiki-docs.json 与 docs/task/**

禁止写入:Brain/**、Bell/**、contracts/**、根级部署配置、冻结上游参考目录。

文档影响

更新 Sense 认证与配置说明:默认登录有效期为固定 30 天,JWT 与前端 Cookie 同步,修改后已有登录需重新登录;长期文档遵循 Wiki → 读取确认 → 同步镜像。

验收标准

  • 非开发模式签发的 JWT 过期时间约为签发后 30 天
  • 前端 Sense-Admin-Token Cookie 使用 30 天持久化期限
  • 生产、demo、SQLite、完整配置和 Windows 运行时生成值均为 2,592,000 秒
  • 浏览器关闭再打开后,在 30 天内仍能读取 Token 并进入系统
  • 退出登录仍删除本机 Token Cookie
  • 已有 Token 不自动延长,部署说明要求重新登录
  • Go、Vue、Windows 包测试和真实启动回归通过
  • ZIP 只含模板配置,不包含现场秘密或数据
  • Wiki、归档、PR 和证据完整,工单已完成验收并关闭

验证方式

  • Go 定向测试与 go test ./...、go vet ./...、后端构建
  • Jest 验证 js-cookie 的 expires: 30 和删除行为
  • PowerShell/包测试验证运行时 settings 为 2,592,000 秒
  • 固定工具链前端 lint、unit、production build
  • Windows ZIP 包审计、迁移、启动与浏览器 Cookie/登录 smoke
  • git diff --check、Wiki 镜像与 Harness 检查

风险与回退

  • 风险:Token 泄露后的可用窗口由 1 小时扩大到 30 天;当前架构没有服务端单 Token 撤销能力。
  • 控制:继续使用高熵独立 JWT secret、HTTPS 部署要求、最小 RBAC、退出删除 Cookie 和身份审计;不把 Token 放入 URL 或日志。
  • 回退:恢复 3600 秒配置和 session Cookie,重新构建部署;已经签发的 30 天 Token 不会因代码回退自动失效,若需立即失效必须轮换部署环境 JWT secret,并会使全部现有登录失效。

协同需求摘要

无跨项目协同需求。

## 状态 已完成 ## 基本信息 - 类型:认证安全行为调整 - 任务类型:单项目独立任务 - 主项目:Sense - 主 agent:Sense agent - 所属 Epic:#7 - 所属 MVP:#8 - 前置工单:#64、#70、#97、#99(均已验收并合入 `dev`) - 并行关系:允许与待验收 #101 并行;本任务从最新 `dev` 创建,修改认证超时、前端 Token Cookie、运行时配置和对应测试,不修改 #101 菜单迁移路径。最终集成包必须在两项均合入 `dev` 后生成。 - 独立运行:Brain、Bell 均不启动时完成实现和验收。 ## 原始需求与追溯 - 来源:用户于 2026-08-17提出“登录默认有效期改成30天”。 - 方案确认:用户于 2026-08-17明确回复“确认,建工单,做”。 - 只读事实:当前生产、demo、SQLite 和完整配置的 `jwt.timeout` 均为 3600 秒;Windows 运行时生成的 settings 也固定为 3600 秒;go-admin-ui 的 `Sense-Admin-Token` 使用 session Cookie,没有持久化天数。 - 上游参考:冻结 go-admin 与 go-admin-doc 默认配置均为 3600 秒,Sense 在保留上游 JWT 中间件与 js-cookie 封装的前提下做产品级默认值调整。 ## 目标 将 Sense 默认登录有效期统一调整为固定 30 天:后端 JWT 和前端持久化 Token Cookie 使用同一默认周期,浏览器重启后仍可在 Token 未过期时保持登录。 ## 做什么 - 将非开发模式默认 JWT 有效期统一为 30 天(2,592,000 秒)。 - 将 go-admin-ui 的 `Sense-Admin-Token` Cookie 持久化期限设为 30 天。 - 更新生产、demo、SQLite、完整配置和 Windows 运行时 settings 生成值。 - 增加后端 JWT 超时、前端 Cookie 参数和运行时生成配置测试。 - 更新长期认证/配置文档,重建 Windows amd64 包并完成启动和登录回归。 - 明确已有 Token 不会被自动延长,部署后需要重新登录取得新 Token。 ## 不做什么 - 不实现滑动续期、Refresh Token、服务端会话表或 Token 黑名单。 - 不改变密码策略、验证码、RBAC、Cookie 名称、JWT secret、登录接口或审计规则。 - 不修改 Bell、Brain、contracts、GoAdmin 冻结基线或公共上游参考仓库。 - 不把真实账号、密码、JWT 或现场配置写入仓库、工单、Wiki 或安装包。 ## GoAdmin 复用门禁 - 参考冻结 go-admin-doc `docs/guide/xmbs.md` 的 `jwt.timeout` 配置方式。 - 复用冻结 go-admin `common/middleware/auth.go` 的 JWT 中间件和 go-admin-ui `src/utils/auth.js` 的 js-cookie 封装。 - 只调整 Sense 产品默认值和测试,不替换认证框架。 ## 写路径 - `Sense/server/common/middleware/auth.go` - `Sense/server/common/middleware/*_test.go` - `Sense/server/config/settings*.yml` - `Sense/server/config/READMEN.md`(同步上游配置示例,避免继续展示 1 小时) - `Sense/scripts/runtime/sense-common.ps1` - `Sense/tests/package/**` - `Sense/ui/src/utils/auth.js` - `Sense/ui/tests/unit/**` - 受影响的 Gitea Wiki 页面及同步生成的 `docs/**` 镜像 - 本工单 Wiki 归档、`wiki-docs.json` 与 `docs/task/**` 禁止写入:`Brain/**`、`Bell/**`、`contracts/**`、根级部署配置、冻结上游参考目录。 ## 文档影响 更新 Sense 认证与配置说明:默认登录有效期为固定 30 天,JWT 与前端 Cookie 同步,修改后已有登录需重新登录;长期文档遵循 Wiki → 读取确认 → 同步镜像。 ## 验收标准 - [x] 非开发模式签发的 JWT 过期时间约为签发后 30 天 - [x] 前端 `Sense-Admin-Token` Cookie 使用 30 天持久化期限 - [x] 生产、demo、SQLite、完整配置和 Windows 运行时生成值均为 2,592,000 秒 - [x] 浏览器关闭再打开后,在 30 天内仍能读取 Token 并进入系统 - [x] 退出登录仍删除本机 Token Cookie - [x] 已有 Token 不自动延长,部署说明要求重新登录 - [x] Go、Vue、Windows 包测试和真实启动回归通过 - [x] ZIP 只含模板配置,不包含现场秘密或数据 - [x] Wiki、归档、PR 和证据完整,工单已完成验收并关闭 ## 验证方式 - Go 定向测试与 `go test ./...`、`go vet ./...`、后端构建 - Jest 验证 js-cookie 的 `expires: 30` 和删除行为 - PowerShell/包测试验证运行时 settings 为 2,592,000 秒 - 固定工具链前端 lint、unit、production build - Windows ZIP 包审计、迁移、启动与浏览器 Cookie/登录 smoke - `git diff --check`、Wiki 镜像与 Harness 检查 ## 风险与回退 - 风险:Token 泄露后的可用窗口由 1 小时扩大到 30 天;当前架构没有服务端单 Token 撤销能力。 - 控制:继续使用高熵独立 JWT secret、HTTPS 部署要求、最小 RBAC、退出删除 Cookie 和身份审计;不把 Token 放入 URL 或日志。 - 回退:恢复 3600 秒配置和 session Cookie,重新构建部署;已经签发的 30 天 Token 不会因代码回退自动失效,若需立即失效必须轮换部署环境 JWT secret,并会使全部现有登录失效。 ## 协同需求摘要 无跨项目协同需求。
ila added the kind/taskproject/sensescope/independentpriority/p0 labels 2026-08-17 10:49:32 +08:00
Author
Owner

实施进度(2026-08-17):

  • 分支:feature/104-sense-login-30-days,从 dev@4b135b852b55f7c04d1e266765c93b840a8342f6 创建;与 #101 代码写路径不重叠。
  • 已读取冻结 go-admin-doc docs/guide/xmbs.md、go-admin common/middleware/auth.go 和 go-admin-ui src/utils/auth.js。
  • 后端非开发模式缺省 JWT 有效期已调整为 30 天,显式配置仍优先,开发模式上游行为保持。
  • 生产/demo/SQLite/full 配置及 Windows 运行时生成值统一为 2,592,000 秒。
  • 前端 Sense-Admin-Token 使用 expires: 30,删除行为不变。
  • Go 定向/全量 test、vet、build 通过;Windows 脚本测试 22 assertions 通过;前端 lint 0 error(32 条既有 warning),18 suites / 48 tests 通过。

下一步:提交实现、更新长期文档、重新构建并验证独立 #104 Windows 包。

实施进度(2026-08-17): - 分支:`feature/104-sense-login-30-days`,从 `dev@4b135b852b55f7c04d1e266765c93b840a8342f6` 创建;与 #101 代码写路径不重叠。 - 已读取冻结 go-admin-doc `docs/guide/xmbs.md`、go-admin `common/middleware/auth.go` 和 go-admin-ui `src/utils/auth.js`。 - 后端非开发模式缺省 JWT 有效期已调整为 30 天,显式配置仍优先,开发模式上游行为保持。 - 生产/demo/SQLite/full 配置及 Windows 运行时生成值统一为 2,592,000 秒。 - 前端 `Sense-Admin-Token` 使用 `expires: 30`,删除行为不变。 - Go 定向/全量 test、vet、build 通过;Windows 脚本测试 22 assertions 通过;前端 lint 0 error(32 条既有 warning),18 suites / 48 tests 通过。 下一步:提交实现、更新长期文档、重新构建并验证独立 #104 Windows 包。
Author
Owner

实施完成,状态已更新为“待验收”。

代码与 PR

  • 分支:feature/104-sense-login-30-days
  • 提交:857ba45、a843121、adc227f、4adf2d6
  • PR:#105 #105(目标 dev,mergeable,未合并)

主要结果

  • 非开发模式缺省 JWT 固定 30 天;显式合法配置仍优先,开发模式保持上游行为。
  • 所有产品/运行时配置统一为 2,592,000 秒。
  • 前端 Token Cookie 使用 expires: 30,退出删除行为保持。
  • 已有 Token 不自动延长,部署后需重新登录。

验证证据

  • Go:go test ./...、go vet ./...、go build ./... 全部通过;固定时钟测试确认实际签发 JWT 的 exp 恰为 30 天。
  • Vue:lint 0 error(32 条既有 warning);18 suites / 48 tests 通过,覆盖 Cookie 设置、读取与删除。
  • Windows:包测试 22 assertions;production build、资源审计和包审计通过;独立 #104 包完成 PostgreSQL 迁移和真实启动,监听 127.0.0.1:18080,生成配置为 timeout: 2592000。
  • 独立包:Sense/dist/sense-windows-amd64-104.zip,56,457,546 bytes;SHA-256 BCE3EDD3F5BD79C75A953CB7673D1C9867CE3BB89755D6A188C7CA1226D05CE3;来源 adc227f110bf0c456d1523eac151ed1d8360cc83。
  • Wiki:Architecture 8df12aa3e136、Local Verification 84a086640dc3、Product Requirements e6c6e0d7f658、Task archive 985be106d605;聚焦镜像检查通过。
  • Harness 单测 31 项通过;check_harness.py --strict 仍只报告既有 #66/#67 归档缺少“修改文件/未验证部分”的 4 项问题,未混入本工单修复。

人工验收边界

  • 无法真实等待 30 天,以固定时钟 JWT 测试替代。
  • 请人工确认:登录后关闭浏览器再打开,仍可进入系统;该项在工单中保持未勾选。
  • #104 独立包不含仍待验收的 #101。当前本机服务和标准包均已恢复为原 #101 验证版本,具名 #104 ZIP 单独保留;两项进入 dev 后才能构建最终组合包。

安全限制:当前没有服务端单 Token 撤销;紧急失效需轮换 JWT secret,并会使全部登录失效。

实施完成,状态已更新为“待验收”。 ## 代码与 PR - 分支:`feature/104-sense-login-30-days` - 提交:`857ba45`、`a843121`、`adc227f`、`4adf2d6` - PR:#105 https://git.ilapage.cn/ila/yovision/pulls/105(目标 `dev`,mergeable,未合并) ## 主要结果 - 非开发模式缺省 JWT 固定 30 天;显式合法配置仍优先,开发模式保持上游行为。 - 所有产品/运行时配置统一为 2,592,000 秒。 - 前端 Token Cookie 使用 `expires: 30`,退出删除行为保持。 - 已有 Token 不自动延长,部署后需重新登录。 ## 验证证据 - Go:`go test ./...`、`go vet ./...`、`go build ./...` 全部通过;固定时钟测试确认实际签发 JWT 的 exp 恰为 30 天。 - Vue:lint 0 error(32 条既有 warning);18 suites / 48 tests 通过,覆盖 Cookie 设置、读取与删除。 - Windows:包测试 22 assertions;production build、资源审计和包审计通过;独立 #104 包完成 PostgreSQL 迁移和真实启动,监听 `127.0.0.1:18080`,生成配置为 `timeout: 2592000`。 - 独立包:`Sense/dist/sense-windows-amd64-104.zip`,56,457,546 bytes;SHA-256 `BCE3EDD3F5BD79C75A953CB7673D1C9867CE3BB89755D6A188C7CA1226D05CE3`;来源 `adc227f110bf0c456d1523eac151ed1d8360cc83`。 - Wiki:Architecture `8df12aa3e136`、Local Verification `84a086640dc3`、Product Requirements `e6c6e0d7f658`、Task archive `985be106d605`;聚焦镜像检查通过。 - Harness 单测 31 项通过;`check_harness.py --strict` 仍只报告既有 #66/#67 归档缺少“修改文件/未验证部分”的 4 项问题,未混入本工单修复。 ## 人工验收边界 - 无法真实等待 30 天,以固定时钟 JWT 测试替代。 - 请人工确认:登录后关闭浏览器再打开,仍可进入系统;该项在工单中保持未勾选。 - #104 独立包不含仍待验收的 #101。当前本机服务和标准包均已恢复为原 #101 验证版本,具名 #104 ZIP 单独保留;两项进入 `dev` 后才能构建最终组合包。 安全限制:当前没有服务端单 Token 撤销;紧急失效需轮换 JWT secret,并会使全部登录失效。
Author
Owner

用户已于 2026-08-17 明确验收通过。

  • PR #105 已合入 dev,merge commit:46c3232da40528d031367225b09d4f28c85a8312。
  • Wiki 任务归档已更新为“已完成”,revision:2b4df23ec321de868840da61d87d8d6fce8537a7。
  • 本地归档镜像已同步并包含在 PR #105;本地 dev 已快进到同一合并提交,工作区干净。
  • 工单所有验收项已勾选;main 未变更。
  • #101 仍待验收,因此最终同时包含 #101/#104 的组合包暂不生成;当前运行中的 #101 验证包保持不变。
用户已于 2026-08-17 明确验收通过。 - PR #105 已合入 `dev`,merge commit:`46c3232da40528d031367225b09d4f28c85a8312`。 - Wiki 任务归档已更新为“已完成”,revision:`2b4df23ec321de868840da61d87d8d6fce8537a7`。 - 本地归档镜像已同步并包含在 PR #105;本地 `dev` 已快进到同一合并提交,工作区干净。 - 工单所有验收项已勾选;`main` 未变更。 - #101 仍待验收,因此最终同时包含 #101/#104 的组合包暂不生成;当前运行中的 #101 验证包保持不变。
ila closed this issue 2026-08-17 11:47:30 +08:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ila/yovision#104