diff --git a/changelogs/2026-05/26_feat_login_response_is_customizer.md b/changelogs/2026-05/26_feat_login_response_is_customizer.md new file mode 100644 index 0000000..04db3e2 --- /dev/null +++ b/changelogs/2026-05/26_feat_login_response_is_customizer.md @@ -0,0 +1,70 @@ +# feat(登录): 小程序登录响应新增 isCustomizer 字段(后端用登录手机号校验定制师身份) + +> **类型**: feat(新增响应字段,向后兼容) +> **关联 PR**: #3023(Closes #3022) +> **日期**: 2026-05-26 +> **影响接口**: `POST /mp/user/login`(微信登录) + `POST /mp/user/login/sms`(短信登录) +> **接收方**: mmg +> **前端**: **可选接入**(老逻辑不受影响,新字段按需使用) + +--- + +## 🎯 背景 + +登录成功后,前端需要知道「当前登录用户是不是定制师」,以决定是否展示「分享名片」等定制师专属入口。此前只能登录后再额外调一次 `GET /mp/customizer/me`。现在**登录响应直接带上 `isCustomizer` 布尔值**,省去这次额外请求。 + +--- + +## 📋 新增字段 + +两个登录接口的响应 `data` 中新增: + +| 字段 | 类型 | 说明 | +|------|------|------| +| `isCustomizer` | boolean | 当前登录用户是否为定制师。`true`=是,`false`=否 | + +**判定规则(后端)**:用本次登录的手机号精确匹配后台 `admin_user.mobile`,且该后台账号 `status=ACTIVE`、并持有 `CUSTOMIZER`(定制师)角色 —— 三者全满足才为 `true`。 + +**注意**:微信登录用户若未授权手机号(后端拿不到 phone),`isCustomizer` 恒为 `false`。 + +--- + +## 📦 响应示例 + +```json +{ + "code": 200, + "message": "成功", + "success": true, + "data": { + "token": "...", + "accessToken": "...", + "refreshToken": "...", + "accessTokenExpiresIn": 15552000, + "refreshTokenExpiresIn": 31536000, + "userId": "2059102607587143681", + "nickname": "用户0001", + "avatar": null, + "phone": "139****0001", + "isNewUser": true, + "needProfile": false, + "isCustomizer": true + } +} +``` + +--- + +## ⚠️ 前端说明 + +1. `isCustomizer` 为**新增字段,纯增量**,不影响任何已有字段,老前端无需改动即可继续工作。 +2. 如需用「登录即知是否定制师」省掉一次 `/mp/customizer/me`,可直接读 `data.isCustomizer`。 +3. **登录响应只给布尔值**;若还需要定制师的 adminId / 姓名 / 头像,继续用 `GET /mp/customizer/me`(返回 `isCustomizer` / `adminId` / `customizerName` / `customizerAvatar`)。需要的话可提需求把这几个字段也并进登录响应。 + +--- + +## 🔧 部署状态 + +测试服 `hl-user-service` + `hl-mp-service` 已部署最新 dev(双实例滚动)。 +- 经测试服网关 `POST /mp/user/login/sms` 实测:普通手机号登录响应已返回 `isCustomizer: false`,字段已上线、序列化正常。 +- 命中定制师返 `isCustomizer: true` 已在本地全链路(网关→mp→user)+ 单元测试覆盖验证。