Admin:用户密码最小长度调整为 6 个字符 #55

Closed
opened 2026-08-09 16:13:01 +08:00 by ila · 2 comments
Owner

基本信息

  • 状态:已完成
  • 类型:需求
  • 父级大工单:#14
  • 所属 MVP / 版本:#15 Admin 四模块可用闭环
  • 阶段:Admin 登录与最小账号管理

要解决什么

当前 Admin 密码最少 8 个字符。用户明确要求把创建用户时的密码最小长度调整为 6 个字符。

首次管理员初始化、创建采购员和重置密码共用同一套服务端密码校验。为避免规则不一致,本工单统一调整三处入口。

做什么 / 不做什么

  • 做:最小密码长度由 8 改为 6;同步服务端、HTML 原生校验、辅助文字、自动化测试和安全基线。
  • 做:覆盖 5 个字符拒绝、6 个字符接受,以及创建和重置入口沿用同一规则。
  • 不做:不改变最大 72 字节限制、bcrypt 哈希、确认密码校验、Session 撤销逻辑。
  • 不做:不修改数据库结构、Client API、角色权限、公开注册范围。
  • 不做:不增加密码复杂度规则或固定默认密码。

怎么做

  1. 把 service.minimumPasswordLen 从 8 调整为 6,继续按 Unicode 字符数校验。
  2. 首次初始化、新增采购员、重置密码的密码与确认密码输入统一使用 minlength="6"。
  3. 表单辅助文字统一显示“至少 6 个字符”,服务端错误继续返回具体最小长度。
  4. 更新认证和用户管理测试,验证边界值及页面属性/文案。
  5. 在需求、UI、安全文档中明确最小 6 个字符;其他密码安全机制保持不变。

预计修改:

  • admin/service/auth.go
  • admin/service/auth_test.go
  • admin/service/user_test.go
  • admin/templates/auth/setup.html
  • admin/templates/user/list.html
  • admin/auth_integration_test.go
  • admin/user_integration_test.go
  • docs/admin/01-requirements.md
  • docs/admin/05-ui-specification.md
  • docs/admin/06-quality-security.md

验收标准

  • 5 个字符的密码在服务端被拒绝,并明确提示至少 6 个字符。
  • 6 个字符的密码可用于首次管理员初始化。
  • 6 个字符的密码可用于创建采购员和重置采购员密码。
  • 三类表单的密码与确认密码字段均为 minlength="6",辅助文字为“至少 6 个字符”。
  • 最大长度、确认密码、bcrypt 哈希和 Session 撤销行为保持不变。
  • 页面和日志不回显密码。
  • gofmt、go vet ./...、go test ./... 通过。
  • 使用 Go 1.23.0 完成构建和全量测试。

怎么验证

从 admin/ 执行:

gofmt -w .
go vet ./...
go test ./...
$env:GOTOOLCHAIN="go1.23.0"
go build ./...
go test ./... -count=1
Remove-Item Env:GOTOOLCHAIN

风险和回退

  • 风险:降低最小长度会减少口令搜索空间。项目仍保留 bcrypt、最长限制、错误信息防枚举和内网使用边界;本任务不擅自增加用户未要求的复杂度规则。
  • 风险:只改前端可被绕过,或只改服务端会造成浏览器提示不一致。因此前后端和测试同时更新。
  • 回退:恢复最小长度常量、三个模板和文档即可;无数据库迁移,无数据回滚。
## 基本信息 - 状态:已完成 - 类型:需求 - 父级大工单:#14 - 所属 MVP / 版本:#15 Admin 四模块可用闭环 - 阶段:Admin 登录与最小账号管理 ## 要解决什么 当前 Admin 密码最少 8 个字符。用户明确要求把创建用户时的密码最小长度调整为 6 个字符。 首次管理员初始化、创建采购员和重置密码共用同一套服务端密码校验。为避免规则不一致,本工单统一调整三处入口。 ## 做什么 / 不做什么 - 做:最小密码长度由 8 改为 6;同步服务端、HTML 原生校验、辅助文字、自动化测试和安全基线。 - 做:覆盖 5 个字符拒绝、6 个字符接受,以及创建和重置入口沿用同一规则。 - 不做:不改变最大 72 字节限制、bcrypt 哈希、确认密码校验、Session 撤销逻辑。 - 不做:不修改数据库结构、Client API、角色权限、公开注册范围。 - 不做:不增加密码复杂度规则或固定默认密码。 ## 怎么做 1. 把 `service.minimumPasswordLen` 从 8 调整为 6,继续按 Unicode 字符数校验。 2. 首次初始化、新增采购员、重置密码的密码与确认密码输入统一使用 `minlength="6"`。 3. 表单辅助文字统一显示“至少 6 个字符”,服务端错误继续返回具体最小长度。 4. 更新认证和用户管理测试,验证边界值及页面属性/文案。 5. 在需求、UI、安全文档中明确最小 6 个字符;其他密码安全机制保持不变。 预计修改: - `admin/service/auth.go` - `admin/service/auth_test.go` - `admin/service/user_test.go` - `admin/templates/auth/setup.html` - `admin/templates/user/list.html` - `admin/auth_integration_test.go` - `admin/user_integration_test.go` - `docs/admin/01-requirements.md` - `docs/admin/05-ui-specification.md` - `docs/admin/06-quality-security.md` ## 验收标准 - [x] 5 个字符的密码在服务端被拒绝,并明确提示至少 6 个字符。 - [x] 6 个字符的密码可用于首次管理员初始化。 - [x] 6 个字符的密码可用于创建采购员和重置采购员密码。 - [x] 三类表单的密码与确认密码字段均为 `minlength="6"`,辅助文字为“至少 6 个字符”。 - [x] 最大长度、确认密码、bcrypt 哈希和 Session 撤销行为保持不变。 - [x] 页面和日志不回显密码。 - [x] `gofmt`、`go vet ./...`、`go test ./...` 通过。 - [x] 使用 Go 1.23.0 完成构建和全量测试。 ## 怎么验证 从 `admin/` 执行: ```powershell gofmt -w . go vet ./... go test ./... $env:GOTOOLCHAIN="go1.23.0" go build ./... go test ./... -count=1 Remove-Item Env:GOTOOLCHAIN ``` ## 风险和回退 - 风险:降低最小长度会减少口令搜索空间。项目仍保留 bcrypt、最长限制、错误信息防枚举和内网使用边界;本任务不擅自增加用户未要求的复杂度规则。 - 风险:只改前端可被绕过,或只改服务端会造成浏览器提示不一致。因此前后端和测试同时更新。 - 回退:恢复最小长度常量、三个模板和文档即可;无数据库迁移,无数据回滚。
Author
Owner

实施完成,待用户验收

最终实现

  • 服务端最小密码长度由 8 调整为 6。
  • 首次管理员初始化、创建采购员、重置密码三类入口统一使用同一规则。
  • 三类表单的密码与确认密码字段均为 minlength="6",辅助文字同步为“至少 6 个字符”。
  • 最大 72 个字节、确认密码、bcrypt、密码不回显和重置后撤销 Session 均保持不变。
  • 已补 5 字符拒绝、6 字符初始化/创建/重置成功以及模板属性/文案测试。

验证

cd admin
gofmt -w .
go vet ./...
go test ./...
$env:GOTOOLCHAIN="go1.23.0"
go build ./...
go test ./... -count=1
Remove-Item Env:GOTOOLCHAIN

结果:go version go1.23.0 windows/amd64,构建和所有测试通过。

未验证:尚未进行用户人工浏览器验收;真实路由和模板渲染已有集成测试覆盖。

提交与归档

  • 实现提交:2cce9e3
  • 归档提交:64318b9
  • 归档:docs/task/55-用户密码最小长度调整为6个字符.md

工单保持打开,等待用户验收后再关闭并同步 #15、#14。

## 实施完成,待用户验收 ### 最终实现 - 服务端最小密码长度由 8 调整为 6。 - 首次管理员初始化、创建采购员、重置密码三类入口统一使用同一规则。 - 三类表单的密码与确认密码字段均为 `minlength="6"`,辅助文字同步为“至少 6 个字符”。 - 最大 72 个字节、确认密码、bcrypt、密码不回显和重置后撤销 Session 均保持不变。 - 已补 5 字符拒绝、6 字符初始化/创建/重置成功以及模板属性/文案测试。 ### 验证 ```powershell cd admin gofmt -w . go vet ./... go test ./... $env:GOTOOLCHAIN="go1.23.0" go build ./... go test ./... -count=1 Remove-Item Env:GOTOOLCHAIN ``` 结果:`go version go1.23.0 windows/amd64`,构建和所有测试通过。 未验证:尚未进行用户人工浏览器验收;真实路由和模板渲染已有集成测试覆盖。 ### 提交与归档 - 实现提交:`2cce9e3` - 归档提交:`64318b9` - 归档:`docs/task/55-用户密码最小长度调整为6个字符.md` 工单保持打开,等待用户验收后再关闭并同步 #15、#14。
Author
Owner

用户已于 2026-08-09 明确通过全部 Admin 待验收工单。本工单验收通过,现关闭,并同步父级 #15、#14 的任务清单。

用户已于 2026-08-09 明确通过全部 Admin 待验收工单。本工单验收通过,现关闭,并同步父级 #15、#14 的任务清单。
ila closed this issue 2026-08-09 21:16:14 +08:00
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chengma/cmautobuy#55