txw/docs/superpowers/specs/2026-04-28-修改密码功能设计.md

3.7 KiB
Raw Blame History

修改密码功能设计

1. 概述

为碳信网平台添加普通用户自助修改密码功能,采用前后端分离架构。

  • 普通用户修改密码:位于 txw-mhzc(用户中心),入口在个人中心左侧菜单
  • 管理员重置密码:已存在于 txw-yygl,无需改动

2. 后端接口

2.1 新增接口

POST /sso/auth/changePassword

请求体:

{
  "oldPassword": "MD5加密字符串",
  "newPassword": "MD5加密字符串",
  "confirmPassword": "MD5加密字符串"
}

响应(统一 CommonResult

{
  "code": 1,
  "data": null,
  "msg": "密码修改成功"
}

2.2 密码复杂度规则

中等级别

  • 长度6-20 位
  • 必须包含:字母 + 数字

2.3 校验流程

  1. 格式校验新密码长度6-20位需同时包含字母和数字
  2. 一致性校验newPassword === confirmPassword
  3. 身份校验authenticate(username, oldPassword) 验证旧密码正确性
  4. 防重名校验newPassword !== oldPassword

2.4 错误码

场景 msg
密码格式不符 密码长度6-20位需包含字母和数字
两次密码不一致 两次输入的新密码不一致
旧密码错误 原密码输入错误
新旧密码相同 新密码不能与原密码相同

2.5 涉及文件

文件 改动
AuthService.java 新增 changePassword 接口声明
AuthServiceImpl.java 实现 changePassword 逻辑
AuthController.java 新增 /auth/changePassword 路由
AuthLoginReqVO.java 建议复用或新建 ChangePasswordReqVO

3. 前端页面txw-mhzc-web

3.1 路由

路由路径 组件 菜单标题
/yhzx/zhanghugl ChangePassword.vue 账号管理

3.2 工作台入口

txw-mhzc-web/src/pages/index/views/gzt/index.vue 新增快捷操作按钮"修改密码",点击跳转 /yhzx/zhanghugl

3.3 用户中心左侧菜单

yhzx 路由的 children 中新增:

{ path: 'zhanghugl', component: zhanghugl, name: 'zhanghugl', meta: { title: '账号管理' } }

3.4 修改密码页面 ChangePassword.vue

页面元素

  • 旧密码输入框(密码类型)
  • 新密码输入框(密码类型)
  • 确认密码输入框(密码类型)
  • 确认按钮

交互逻辑

  • 输入框下方实时显示密码格式提示
  • 提交前统一校验
  • 成功后给出提示并可跳转其他页面
  • 失败回显错误信息

3.5 API 调用

// txw-mhzc-web/src/pages/index/api/sso.js
export const changePassword = (params) => {
  return fetchSso({
    url: '/sso/auth/changePassword',
    data: JSON.stringify(params),
    method: 'post',
    loading: true,
  });
};

3.6 涉及文件

文件 改动
router/routes.js 新增 zhanghugl 路由
views/gzt/index.vue 新增修改密码快捷入口
views/yhzx/zhanghugl/index.vue 新建修改密码页面
api/sso.js 新建,封装 changePassword API

4. yygl 管理员重置密码(已有,无需改动)

文件 说明
txw-yygl-web/.../yhgl/index.vue "重置密码"按钮,调用 resetPassword(yhUuid)
txw-yygl-web/.../api/htgl.js resetPassword 接口已实现
txw-mhzc/.../UserController.java resetPassword 接口已实现,重置为配置默认密码

5. 数据库字段

用户表 dlmm 字段存储 MD5 加密后的密码。


6. 备注

  • 旧密码传输前已在前端做 MD5 加密(与现有登录流程一致)
  • 新密码传输前在前端做 MD5 加密
  • 此设计与现有 authenticateisPasswordMatch 逻辑保持一致