终端用户 Portal 只接受独立账号和密码登录,不再接受邮箱作为登录标识;管理员 sys_user 与终端用户 users 继续分表。
sys_user
users
username
user_<id>
account + password
users.username
autocomplete=username
CHORUS_SEED_USER_USERNAME
migrations/
account
email
账号 seed 的真实 MySQL 测试发现:MVP-1 migration 000003 已为 prompt_templates 增加必填 capability / default_role_rule,但旧 cmd/chorus-seed 仍按 MVP-0 列写入,当前 schema 上会失败,直接阻塞使用 seed 设置新账号。
prompt_templates
capability
default_role_rule
cmd/chorus-seed
按本工单目标做最小修复:默认 seed 数据显式增加 capability;Prompt 写入必填字段;ProviderModel 同步写 provider_model_capabilities。不改变已确认 Prompt 正文、不创建路由、不调用 Provider。已补 opt-in MySQL 幂等测试,连续 seed 两次仍只有一个构造用户且密码保持版本化 bcrypt 哈希。
provider_model_capabilities
0af44bd feat: 用户端改为账号登录 (#50)
origin/main
go test ./...
go vet ./...
go -C admin test ./...
pnpm build
harness.py check --strict
sync --check
575443f808c909383071207adb0be843b88f8b0d
656753d7ce1285da7857e5276fb7748c2b429d64
4d052c431913a259bbf1383b4e40c729486f3d99
da0a7321fbffe53956c4bdb28a5b3b07a261c6f7
Supervisor 中 Portal、管理端 API、管理端 UI 已使用本次构建运行,Portal 登录页为 http://127.0.0.1:8085/login。当前隔离 Portal 数据库的历史测试用户账号已回填为 user_1,本工单未新建或公开可用密码。
http://127.0.0.1:8085/login
user_1
Task-50-用户端仅账号密码登录
90e90c2d924bd8d8a7ea1d7df29b157e2313f117
0af44bd
父工单 #35 与 Epic #3 已同步勾选,本工单关闭。
No dependencies set.
The note is not visible to the blocked user.
基本信息
原始需求
目标
终端用户 Portal 只接受独立账号和密码登录,不再接受邮箱作为登录标识;管理员
sys_user与终端用户users继续分表。已确认方案
users新增规范化后唯一且非空的username,历史用户使用确定性的user_<id>回填。account + password,只按users.username查询,不提供邮箱兼容分支。autocomplete=username,保留现有密码显隐、错误反馈、CSRF、Session 轮换与登录限流。CHORUS_SEED_USER_USERNAME,并按账号/邮箱唯一约束幂等更新受控用户。范围与非目标
sys_user与users、删除邮箱、邮箱或账号双模式登录。迁移与回退
users.username,回填user_<id>后设为非空并增加唯一索引。migrations/演进,并在隔离 MySQL 8 验证 up/down/up。风险
设计证据
验收标准
account字段,不再接受email字段。文档影响
实施中发现与范围更新(2026-08-24)
账号 seed 的真实 MySQL 测试发现:MVP-1 migration 000003 已为
prompt_templates增加必填capability/default_role_rule,但旧cmd/chorus-seed仍按 MVP-0 列写入,当前 schema 上会失败,直接阻塞使用 seed 设置新账号。按本工单目标做最小修复:默认 seed 数据显式增加 capability;Prompt 写入必填字段;ProviderModel 同步写
provider_model_capabilities。不改变已确认 Prompt 正文、不创建路由、不调用 Provider。已补 opt-in MySQL 幂等测试,连续 seed 两次仍只有一个构造用户且密码保持版本化 bcrypt 哈希。实施完成,等待验收
0af44bd feat: 用户端改为账号登录 (#50),已推送至origin/main。user_<id>,账号非空、唯一且受格式约束。account + password并只查询users.username;旧emailJSON 契约返回 400,邮箱值作为 account 返回统一 401。CHORUS_SEED_USER_USERNAME,并修复当前 schema 下 Prompt/ProviderModel 必填能力数据的幂等写入。验证证据
go test ./...、go vet ./...:通过。go -C admin test ./...:通过。pnpm build:通过。harness.py check --strict、核心 Wikisync --check:通过。Wiki revision
575443f808c909383071207adb0be843b88f8b0d656753d7ce1285da7857e5276fb7748c2b429d644d052c431913a259bbf1383b4e40c729486f3d99da0a7321fbffe53956c4bdb28a5b3b07a261c6f7Supervisor 中 Portal、管理端 API、管理端 UI 已使用本次构建运行,Portal 登录页为
http://127.0.0.1:8085/login。当前隔离 Portal 数据库的历史测试用户账号已回填为user_1,本工单未新建或公开可用密码。人工验收完成
Task-50-用户端仅账号密码登录90e90c2d924bd8d8a7ea1d7df29b157e2313f117sync --check:通过。0af44bd父工单 #35 与 Epic #3 已同步勾选,本工单关闭。