diff --git a/docs/task/55-用户密码最小长度调整为6个字符.md b/docs/task/55-用户密码最小长度调整为6个字符.md new file mode 100644 index 0000000..2422a25 --- /dev/null +++ b/docs/task/55-用户密码最小长度调整为6个字符.md @@ -0,0 +1,62 @@ +# 55 Admin:用户密码最小长度调整为 6 个字符 + +- 类型:需求 +- 父级大工单:#14 +- 所属 MVP / 版本:#15 Admin 四模块可用闭环 +- 状态:已完成 +- 日期:2026-08-09 +- Gitea 工单:http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/55 + +## 背景与目标 + +Admin 原来要求密码至少 8 个字符。用户要求创建用户时改为至少 6 个字符。 +首次管理员初始化、创建采购员和重置密码共用同一套密码策略,因此本任务把三个入口 +统一为至少 6 个字符,避免出现前后端或不同页面规则不一致。 + +## 最终方案 + +- 服务端最小密码长度常量从 8 改为 6,仍按 Unicode 字符数判断。 +- 首次管理员、创建采购员、重置密码的密码和确认密码字段全部改为 + `minlength="6"`。 +- 初始化、创建和重置表单都显示“至少 6 个字符”的辅助文字;服务端校验失败 + 明确提示至少需要 6 个字符。 +- 最大 72 个字节、确认密码、bcrypt 哈希、错误信息防账号枚举、重置后撤销 Session + 等既有安全规则不变。 +- 增加 5 个字符拒绝、6 个字符初始化/创建/重置成功以及模板属性和文案测试。 + +实际实现与建单方案一致,没有数据库或 Client API 变更。 + +## 改了哪些 + +- `admin/service/auth.go`:最小密码长度改为 6。 +- `admin/templates/auth/setup.html`:初始化管理员表单规则和提示同步为 6。 +- `admin/templates/user/list.html`:创建与重置密码表单规则和提示同步为 6。 +- `admin/service/auth_test.go`、`admin/service/user_test.go`:覆盖服务端边界值。 +- `admin/auth_integration_test.go`、`admin/user_integration_test.go`:覆盖模板属性与文案。 +- `docs/admin/01-requirements.md`、`05-ui-specification.md`、 + `06-quality-security.md`:记录统一密码规则和测试要求。 + +## 验收结果 + +| 验收标准 | 结果 | +|---|---| +| 5 个字符被拒绝并提示至少 6 个字符 | 通过 | +| 6 个字符可初始化管理员 | 通过 | +| 6 个字符可创建采购员和重置密码 | 通过 | +| 三类表单密码与确认密码均为 `minlength="6"` | 通过 | +| 三类表单显示至少 6 个字符的辅助文字 | 通过 | +| 最大长度、确认密码、bcrypt 和 Session 撤销保持不变 | 通过 | +| 页面和日志不回显密码 | 通过 | +| 格式、静态检查和全量测试通过 | 通过 | +| Go 1.23.0 构建和无缓存测试通过 | 通过 | + +## 测试 + +- 执行的命令:`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` fix: 用户密码最小长度调整为六位 (#55)