2026-10-17 22:44:09 +08:00
# 注册、资料与头像后端联调
## 本次接通范围
- 微信登录 → 新用户绑定手机号 → 完善资料;已注册用户直接恢复后端账号。
- 编辑页从后端回显,只有个人字段变更才提交资料更新。
- 头像通过现有后端文件存储服务上传。首页左上角、我的、编辑页共用头像组件和资料状态,成功保存后同步更新。
- 未填写生日、时辰、地区的新账号保持空值,不使用预览资料冒充真实账号。
- 登录凭证失效后清除本地会话;失效头像链接通过资料接口刷新,不在前端签名 COS 文件。
- 天宫绑定等已有隔离 Mock 未改成真实后端业务。本次没有提交或推送代码。
2026-10-17 22:58:40 +08:00
## 当前默认部署地址
- 前端默认 API 基址已改为 `http://101.43.139.56/hera` ,登录、资料和头像上传均复用该前缀。
- 本地后端服务地址没有改变,但前端如需改回本机,构建前需设置 `HERA_API_BASE_URL=http://127.0.0.1:8080` ;该设置在构建时生效。
- 只读探测远端 `/hera/api/user/profile` 当前返回 404,尚不能据此确认服务已经部署可用。服务器需要正确处理 `/hera` 代理或应用上下文路径;部署后未登录访问资料接口应返回 401,而不是 404。
- 服务器头像文件入口需独立配置 `TENCENT_COS_PUBLIC_BASE_URL` ,例如 `http://101.43.139.56/hera/file/` ,并转发到后端签名控制器。前端不改写后端返回的绝对头像 URL,不会把本地入口自动变成公网入口。
- HTTP/IP 地址为当前联调部署地址,正式小程序发布需配置 HTTPS 合法域名;本次未修改远程服务器、后端配置或存储权限。
2026-10-17 22:44:09 +08:00
## 本地入口与启动
- 前端:`http://127.0.0.1:4173/#/pages/my/index` ,真实模式不带 `preview=1` 。
- 后端:`http://127.0.0.1:8080` ,已按用户授权使用现有本地配置启动。
- `?preview=1` 保留只读样例,不保存资料、不上传头像、不调用注册接口。
- `?avatarDemo=1` 为用户要求的 H5 已登录头像演示,可直接进入我的、选择本地图片并保存,首页/我的/编辑页同步;不创建登录 token,不请求后端或 COS,刷新后重置,不影响真实登录缓存。演示入口:`http://127.0.0.1:4173/?avatarDemo=1#/pages/my/index` 。
- 导入前端项目根目录的 `project.config.json` ,小程序目录为 `dist/` 。修改源码后运行 `npm run build:weapp` , H5 运行 `npm run build:h5` 。
- 构建前可设置 `HERA_API_BASE_URL` ;真机的 `127.0.0.1` 指向手机本身,必须换成手机可访问的后端地址。
- H5 不具备小程序 `wx.login` 能力,不使用伪造 code 或临时开发 JWT 绕过注册。首次真实登录请用微信开发者工具或微信。
## 开发者工具验收
1. 导入项目并编译。在“我的”或首页点“登录 / 注册”,执行微信登录。新微信用户应看到手机号、验证码输入;老用户应直接恢复对应账号。
2. 新用户输入自己的手机号,点“获取验证码”。现有后端返回开发验证码,界面明确标记“非真实短信”;填入后绑定,进入“完善注册资料”。填写昵称、性别、生日、时辰、省市区并保存,应进入“我的”,再次进入编辑页数据应一致。
3. 点我的头部进入编辑页,依次测试微信头像、相册、拍照;取消选择不提交。选择后仅本页预览,点保存才上传;保存成功后首页、我的、编辑页应显示同一张头像,重新编译/重进后仍由后端回显。
4. 只修改头像:网络面板应出现 `POST /api/user/avatar` ,不出现 `PUT /api/user/profile` ,资料修改次数不减少。头像最大 5MB,格式限 JPG/PNG/WebP,服务端负责最终校验。
5. 只修改个人字段:保存应出现一次资料 PUT。什么都不改直接保存不消耗次数。连续点击保存不能重复提交。
6. 同时修改头像和资料:先上传头像再保存资料。上传失败时不得提交资料 PUT;若头像成功但资料失败,应明确提示部分成功,重试不重复上传已经保存的头像。
7. 清除登录缓存或使用失效凭证,进入真实模式应提示登录,不展示其他账号或假样例。已登录头像加载失效时应向资料接口重新取链接;网络不可用时保留默认头像,不无限重试。
8. 首页、我的及编辑页在窄屏、常见机型和底部安全区检查头像裁切、表单与导航;真机检查相册/相机权限、取消和失败提示。
## 本次使用的全部账号接口
统一业务响应为 `{ code, message, data }` ,成功 `code=0` 。资料与上传需要 `Authorization: Bearer <token>` ;失效登录 HTTP 401。
| 方法与路径 | 参数 | 返回及用途 |
| --- | --- | --- |
| POST `/api/auth/wx-login` | JSON `{code}` ,由真实 `wx.login` 获取 | 新用户 `{sessionKey,phoneBound:false}` ;老用户包含 `{phoneBound:true,token,user}` |
| POST `/api/auth/sms` | JSON `{phone}` | `{mockCode}` ,当前开发验证码,不是真实短信服务 |
| POST `/api/auth/bind-phone` | JSON `{sessionKey,phone,captcha}` | `{token,user}` ,建立/绑定正式账号后进入资料补全或我的 |
| GET `/api/user/profile` | Bearer token | 完整资料,包含 `avatarUrl` 、`remainingEdits` ,供回显与头像链接续取 |
| PUT `/api/user/profile` | JSON `{nickname,gender,birthday,birthHour,province,city,district}` | 完整资料;受现有后端半年 5 次限制,不附带头像字段 |
| POST `/api/user/avatar` | Bearer token, multipart 字段 `file` | 完整资料;后端调用既有 COS 存储并关联账号,不消耗资料修改次数 |
| GET `/file/access?token=…` | 后端返回的文件专用临时 token,由图片加载访问 | 302 跳转私有 COS 签名地址;不是登录 token,不在前端拼装签名 |
接口均为现有真实接口,不是本次拟定的假接口。数据库保存 `cos://` 对象引用,前端只使用后端返回的访问 URL,不持久化临时签名为对象身份。
## 已验证与边界
2026-10-17 22:58:40 +08:00
- 前端自动测试 59 项通过(包含远端 API 前缀与本地覆盖、日主五行入口图标、隔离头像演示、编辑页样式作用域及 WXSS 兼容回归测试),TypeScript 检查、H5 和微信构建通过。13 个产物 WXSS 均通过本机微信开发者工具自带 `wcsc` 的原生编译检查;这不替代真实登录/上传验收。
2026-10-17 22:44:09 +08:00
- 后端干净构建默认执行的 17 项单元/隔离测试通过:注册/资料/头像控制器链路、账号 CRUD、仅当前表启动、头像限额与格式、401、文件访问、COS 和 Redis 配置测试。4 项需要显式启用的外部集成测试在默认构建中跳过。业务写入测试使用隔离 H2,微信客户端及实际 COS 上传使用测试替身,不代表已向真实 COS 上传成功。另有 1 项当前配置数据库的只读 Mapper 集成检查通过,不读取真实账号记录或写入数据库。
- 已运行的本地后端:无登录和无效凭证请求均返回 401;资料 PUT 跨域预检返回 200 并允许 Authorization、Content-Type。前端入口 HTTP 200。
- 真实联调阶段浏览器验收曾被额度限制阻止;后续用户要求的 H5 已登录演示已在浏览器验证:从相册选择项目测试图片、保存、我的/首页/重新进入编辑页均成功加载同一本地头像。截图保存在 `/private/tmp/hera-avatar-demo-my.png` 。这不是实际 COS 上传证据;真实微信授权、真实账号写入和实际 COS 上传/展示仍须完成上述开发者工具验收。
- 本地 API 为 HTTP,现有文件公开入口也可能为 HTTP。上线和真机需确认 HTTPS、合法请求/上传/下载域名、图片重定向域名,以及文件入口和签发端使用一致的配置。不能仅凭后端启动成功认定真实文件入口已经可用。
- 头像文件入口本地联调已修复:仅在后端被 Git 忽略的 `.hera-local.yml` 中将 `hera.cos.public-base-url` 覆盖为 `http://127.0.0.1:8080/file/` 并重启。使用用户本次报错对应的已有头像,只读验证本地入口返回 302、私有 COS HTTPS 图片读取返回 200;没有上传、删除文件或修改存储桶权限。远程 `101.43.139.56/file/access` 探测返回 COS 格式的 403 `AccessDenied` ,远程反向代理配置未修改;上线需将文件网关请求转发后端签名入口,而非直接转发 COS 的 `/access` 对象路径。开发者工具重新编译/重进我的,以获取新头像 URL;手机真机不能使用电脑的 `127.0.0.1` 。
- 资料 PUT 与头像上传是两个独立接口,部分成功会明确告知,不宣称原子事务;网络超时后服务端是否已提交需重新读取确认,后端当前没有请求幂等键。
- 修复“进入编辑页再返回,默认头像/我的元素变形”:H5 懒加载的编辑页 CSS 曾以全局 `.water-mascot` 覆盖我的页同名图标。编辑页样式现全部限定 `.edit-page` ,并使用独立的 `edit-water-mascot` 类,避免双向样式冲突;不涉及头像数据或接口变更。
- 根据用户确认的数据库结构,移除 `user_account.nfc_uid` 对应的实体字段、账号 Mapper 读写与新建表定义,不执行补列或删除数据库字段。`user_virtual_item` 中独立的绑定字段不在本次账号字段移除范围。已重新部署本地后端;实际微信登录仍需开发者工具重新获取 code,不能重放已使用的 code。
- 按系统尚未上线、只采用当前表结构的要求,删除历史用户迁移源码及其测试,解除业务启动对迁移组件的依赖,不再自动补列、修改旧表或搬迁旧账号。保留首次注册和注册后再次登录的正常流程;数据库已有表与记录不删除。干净构建已确认产物没有旧迁移类,清理后的本地后端已重启。
## 与原型差异及待确认
- 保留原有页面视觉与头像选择入口。新增登录失效、资料加载失败、注册补全、上传错误和开发验证码的必要状态提示,不以样例资料掩盖失败。
- 待确认上线短信供应商及验证码策略;现有开发验证码不能作为生产短信能力。
- 待确认测试/生产 HTTPS API 和文件访问域名,真实微信账号与 COS 联调需用户在开发者工具授权验收。未改动生产域名或伪造注册凭证。