148 lines
3.7 KiB
Markdown
148 lines
3.7 KiB
Markdown
# 修改密码功能设计
|
||
|
||
## 1. 概述
|
||
|
||
为碳信网平台添加普通用户自助修改密码功能,采用前后端分离架构。
|
||
|
||
- **普通用户修改密码**:位于 `txw-mhzc`(用户中心),入口在个人中心左侧菜单
|
||
- **管理员重置密码**:已存在于 `txw-yygl`,无需改动
|
||
|
||
---
|
||
|
||
## 2. 后端接口
|
||
|
||
### 2.1 新增接口
|
||
|
||
**POST `/sso/auth/changePassword`**
|
||
|
||
请求体:
|
||
```json
|
||
{
|
||
"oldPassword": "MD5加密字符串",
|
||
"newPassword": "MD5加密字符串",
|
||
"confirmPassword": "MD5加密字符串"
|
||
}
|
||
```
|
||
|
||
响应(统一 `CommonResult`):
|
||
```json
|
||
{
|
||
"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 中新增:
|
||
```js
|
||
{ path: 'zhanghugl', component: zhanghugl, name: 'zhanghugl', meta: { title: '账号管理' } }
|
||
```
|
||
|
||
### 3.4 修改密码页面 `ChangePassword.vue`
|
||
|
||
**页面元素**:
|
||
- 旧密码输入框(密码类型)
|
||
- 新密码输入框(密码类型)
|
||
- 确认密码输入框(密码类型)
|
||
- 确认按钮
|
||
|
||
**交互逻辑**:
|
||
- 输入框下方实时显示密码格式提示
|
||
- 提交前统一校验
|
||
- 成功后给出提示并可跳转其他页面
|
||
- 失败回显错误信息
|
||
|
||
### 3.5 API 调用
|
||
|
||
```js
|
||
// 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 加密
|
||
- 此设计与现有 `authenticate` 的 `isPasswordMatch` 逻辑保持一致
|