liuyun 5685a5ce42
Some checks are pending
CI / backend (push) Waiting to run
CI / frontend (push) Waiting to run
feat(auth): 首登强制改密(子模块 + openspec change)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-11 21:54:53 +08:00

2.0 KiB
Raw Blame History

Why

管理员创建用户、重置密码、建租户下发的都是临时/初始密码,但系统没有「首登强制改密」机制——临时密码可被长期使用,一旦泄漏即越权。企业后台需要一条强制闭环:拿到临时密码 → 首登被拦 → 改密 → 才可用系统。

What Changes

  • 待改密标记:user 新增 must_change_password(布尔,默认 false);管理员重置密码、createTenant 下发随机密码时置 true,管理员创建用户时默认强制(可关闭),用户自行改密成功后清 false。
  • 登录返回标志:登录响应新增 mustChangePassword。
  • 后端硬门禁:未改密用户仅可访问「修改本人密码 / 登出」,其余接口返回 403。
  • 前端强制流程:登录后若待改密,强制跳转改密页并拦截其它路由;改密成功后清会话、跳登录重新认证。

Capabilities

New Capabilities

  • frontend/AD/force-password-change: 首登强制改密页面与路由守卫(强制跳转、改密后重新登录)。

Modified Capabilities

  • shared/data-model: user 实体新增 must_change_password 待改密标记。
  • shared/api-contract: 登录响应新增 mustChangePassword 标志。
  • backend/auth: 登录返回待改密标志、改密清除标志、新增「待改密门禁」。
  • frontend/AD/user: 创建用户表单新增「首登强制改密」配置项。

Impact

  • 后端:auth(login 返回标志、changePassword 清标志、JwtAuthGuard 加门禁)、users(createUser 接受 mustChangePassword 参数、resetPassword 置标记)、tenants(createTenant 置标记)、tenant-template(initTenant 加 forcePasswordChange 选项);Prisma migration(sys_user 加列)。
  • 前端:登录 store 保存待改密状态、路由守卫拦截、新增强制改密页、用户创建表单加「首登强制改密」开关、api/auth.ts 类型扩展。
  • 数据:Prisma migration(sys_user 加 must_change_password)。