fix: 登录有效期由 8 小时改为 30 天 (#42) #43

Merged
ila merged 1 commits from fix/42-session-lifetime-30-days into main 2026-09-16 21:42:39 +08:00
Owner

工单 #42 的实现与证据见 #42 。

  • SessionLifetime = 30 * 24 * time.Hour(server/app/lexgo/service.go):学习端与管理端共用同一登录
    接口,因此一处生效;绝对有效期,不滑动续期。
  • 无数据库结构变化、无接口字段变化;旧会话按各自 expires_at 自然过渡。
  • 撤销规则不变:退出撤销当前会话,改密码/停用/重置撤销该账号全部会话,服务端只存 SHA-256 摘要。
  • 测试:Go 92 项通过(新增 TestMySQLSessionLifetimeIsThirtyDays 锁定 30 天常量、响应与库内
    expires_at 一致、库内只存摘要;过期断言改为按常量计算:SessionLifetime - 1h 仍可用、
    再前进 2 小时被拒)。
  • 安全代价已在工单记录:令牌泄露窗口由 8 小时变为 30 天(约 90 倍),设备/会话列表与
    "退出其他设备"未包含在本单。
  • 文档:Wiki 已更新会话规则数字、验证说明与 Home/Project-Profile 记录;核心镜像导出将在验收时执行,
    以免把尚未合入的 #40 段落带进本分支。

不合并既有 PR,基准分支为已验收的 main。

工单 #42 的实现与证据见 https://git.ilapage.cn/OPC/lexgo/issues/42 。 - `SessionLifetime = 30 * 24 * time.Hour`(`server/app/lexgo/service.go`):学习端与管理端共用同一登录 接口,因此一处生效;**绝对**有效期,不滑动续期。 - 无数据库结构变化、无接口字段变化;旧会话按各自 `expires_at` 自然过渡。 - 撤销规则不变:退出撤销当前会话,改密码/停用/重置撤销该账号全部会话,服务端只存 SHA-256 摘要。 - 测试:Go 92 项通过(新增 `TestMySQLSessionLifetimeIsThirtyDays` 锁定 30 天常量、响应与库内 `expires_at` 一致、库内只存摘要;过期断言改为按常量计算:`SessionLifetime - 1h` 仍可用、 再前进 2 小时被拒)。 - 安全代价已在工单记录:令牌泄露窗口由 8 小时变为 30 天(约 90 倍),设备/会话列表与 "退出其他设备"未包含在本单。 - 文档:Wiki 已更新会话规则数字、验证说明与 Home/Project-Profile 记录;核心镜像导出将在验收时执行, 以免把尚未合入的 #40 段落带进本分支。 不合并既有 PR,基准分支为已验收的 main。
ila added 1 commit 2026-09-16 21:18:38 +08:00
- 有效期提取为具名常量 SessionLifetime(绝对有效期,不滑动续期),学习端与管理端共用
  同一登录接口,一处生效;数据库结构与接口字段不变,旧会话按各自 expires_at 自然过渡。
- 过期断言改为按常量计算(临期仍可用、超过后被拒),新增测试锁定 30 天常量、
  登录响应与库内 expires_at 一致、库内只存 SHA-256 摘要。
- 撤销规则不变:退出撤销当前会话,改密码/停用/重置撤销该账号全部会话。
- Wiki 已在线上更新(会话规则数字、验证说明、Home/Project-Profile 记录);镜像导出留到
  验收时执行,避免把尚未合入的 #40 段落带进本分支。
ila merged commit 4e4fb85d2f into main 2026-09-16 21:42:39 +08:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/lexgo#43