# 当前登录账号修改密码接口说明

## 功能说明

- 适用范围：任意端口账号登录后修改当前登录账号自己的密码
- 安全限制：只能修改当前登录态对应账号的密码，不能修改其他账号或其他端口账号的密码
- 推荐接口：`PUT /system/user/profile/updatePwd`
- 兼容接口：`PUT /system/user/profile/updateSubPwd`

## 规则说明

- 超级管理员修改的是 `sys_user.password`
- 普通端口账号修改的是当前登录端口记录 `sys_user_login_port.sub_password`
- 后端会从当前登录 token 中自动识别当前账号
- 前端不需要传目标账号 ID
- 如果传了 `portId`，且与当前登录端口不一致，后端会直接返回失败：`只能修改当前登录账号密码`

## 1. 推荐接口

- 路径：`PUT /system/user/profile/updatePwd`
- 说明：当前登录用户修改自己的密码

### 请求头

| 请求头 | 是否必填 | 说明 |
| --- | --- | --- |
| `Authorization` | 是 | 登录 token |
| `isEncrypt` | 是 | 传 `true`，与现有加密请求保持一致 |
| `repeatSubmit` | 否 | 可传 `false` |
| `Content-Type` | 是 | `application/json` |

### 请求参数

| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `oldPassword` | String | 是 | 旧密码 |
| `newPassword` | String | 是 | 新密码 |
| `portId` | Long | 否 | 非必填；建议不要传，若传入的不是当前登录端口 ID 会被拒绝 |

### 请求示例

```json
{
  "oldPassword": "123456",
  "newPassword": "NewPwd@2026"
}
```

### 返回成功示例

```json
{
  "code": 200,
  "msg": "操作成功",
  "data": null
}
```

### 常见失败响应

| 提示 | 说明 |
| --- | --- |
| `修改密码失败，旧密码错误` | 旧密码校验失败 |
| `新密码不能与旧密码相同` | 新旧密码一致 |
| `只能修改当前登录账号密码` | 试图修改非当前登录端口账号密码 |
| `当前登录账号未绑定端口，无法修改密码` | 当前登录态无端口信息 |
| `当前登录账号不存在或无权修改` | 当前登录端口记录不存在或不属于当前用户 |
| `修改密码异常，请联系管理员` | 数据更新失败 |

## 2. 兼容接口

- 路径：`PUT /system/user/profile/updateSubPwd`
- 说明：为兼容历史前端保留，实际安全限制与推荐接口一致，也只能修改当前登录账号密码

### 请求方式

- `body` 仍传：

```json
{
  "oldPassword": "123456",
  "newPassword": "NewPwd@2026"
}
```

- 历史前端若在 query 中传 `portId`，只有在它等于当前登录端口 ID 时才允许通过

## 3. 前端调用示例

### Web 端

```ts
request({
  url: '/system/user/profile/updatePwd',
  method: 'put',
  headers: {
    isEncrypt: true,
    repeatSubmit: false
  },
  data: {
    oldPassword,
    newPassword
  }
})
```

### uni-app / 移动端

```js
request({
  url: '/system/user/profile/updatePwd',
  method: 'put',
  header: {
    isEncrypt: true
  },
  data: {
    oldPassword,
    newPassword
  }
})
```

## 4. 对接建议

- 新接入前端统一调用 `PUT /system/user/profile/updatePwd`
- 不要让前端选择目标账号，也不要透传其他账号或其他端口的 `portId`
- 修改成功后，建议前端提示用户重新使用新密码登录
