Files
one-pipe-system/openspec/changes/add-self-service-password-dialog/specs/user-auth/spec.md
luo abd1467482
Some checks failed
构建并部署前端到测试环境 / build-and-deploy (push) Failing after 13m9s
fix: 实名时间+8和修改密码新增
2026-10-09 10:52:39 +08:00

3.5 KiB
Raw Blame History

ADDED Requirements

Requirement: Self-service password menu entry

系统 SHALL 在顶部用户菜单“个人中心”和“锁定屏幕”之间提供“修改密码”入口,点击后显示当前登录用户的修改密码弹窗,不跳转页面。

Scenario: 打开修改密码弹窗

  • WHEN 当前登录用户点击顶部菜单“修改密码”
  • THEN 系统 MUST 关闭用户菜单浮层并显示修改密码弹窗
  • AND 弹窗 MUST 包含旧密码、新密码、确认新密码、取消及确认操作
  • AND 输入 MUST 默认隐藏密码并支持切换可见

Requirement: Password form validation

系统 SHALL 校验旧密码必填、新密码及确认新密码长度为 8–32 位且两次新密码一致,在校验通过前不得发送修改密码请求。系统 MUST NOT 自动裁剪或修改用户输入的密码,也不得对旧密码新增长度限制。

Scenario: 密码长度边界

  • WHEN 新密码或确认新密码长度为 7 或 33 位
  • THEN 表单 MUST 提示长度要求并阻止提交
  • AND 长度为 8 或 32 位且其他校验通过时 MUST 允许提交

Scenario: 必填及一致性校验

  • WHEN 任一密码字段为空,或者两次新密码不一致
  • THEN 表单 MUST 展示对应字段错误并阻止提交

Requirement: Unified authentication password contract

系统 SHALL 通过现有统一认证请求层调用 PUT /api/auth/password,请求体 MUST 仅包含 old_password 和 new_password,Bearer 认证 MUST 沿用当前登录会话,确认密码 MUST NOT 发送到服务端。

Scenario: 提交有效表单

  • WHEN 用户提交通过校验的密码表单
  • THEN 系统 MUST 发送旧密码至 old_password、新密码至 new_password
  • AND 请求方法 MUST 为 PUT,请求路径 MUST 为 /api/auth/password
  • AND 请求 MUST 沿用现有请求层的 Bearer 认证

Requirement: Password submission lifecycle

系统 SHALL 在提交期间提供加载状态并阻止重复提交;成功后提示、关闭弹窗并清空敏感字段及记住密码凭证;普通失败时保留弹窗并展示后端错误;认证过期 MUST 沿用现有请求层处理。成功后系统 MUST NOT 主动退出登录或改变锁屏密码。

Scenario: 重复点击提交

  • WHEN 修改密码请求尚未完成时用户再次确认
  • THEN 系统 MUST 保持加载状态且不得发送重复请求

Scenario: 修改成功

  • WHEN 修改密码请求成功
  • THEN 系统 MUST 提示成功并关闭弹窗
  • AND 系统 MUST 清空全部密码字段及保存的旧登录凭证
  • AND 系统 MUST 保留当前登录状态,不修改锁屏密码

Scenario: 修改失败

  • WHEN 接口返回普通错误,如旧密码错误或服务器错误
  • THEN 系统 MUST 通过现有请求层展示错误并保留弹窗
  • AND 系统 MUST 解除提交中状态以允许用户更正后重试

Scenario: 取消后重新打开

  • WHEN 用户取消或关闭弹窗后重新打开
  • THEN 所有密码字段及校验状态 MUST 为空

Requirement: Password dialog interface consistency

修改密码弹窗 SHALL 复用现有 Element Plus 组件和主题,支持中英文、键盘操作及窄屏展示,密码输入 MUST 具备可识别标签和可见校验反馈。

Scenario: 窄屏及键盘操作

  • WHEN 用户在窄屏设备或通过键盘打开弹窗
  • THEN 弹窗 MUST 不产生水平溢出,且可访问全部输入、取消及确认操作