Files
hera-web/docs/account-backend-integration.md

75 lines
10 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 注册、资料与头像后端联调
## 本次接通范围
- 微信登录 → 新用户绑定手机号 → 完善资料;已注册用户直接恢复后端账号。
- 编辑页从后端回显,只有个人字段变更才提交资料更新。
- 头像通过现有后端文件存储服务上传。首页左上角、我的、编辑页共用头像组件和资料状态,成功保存后同步更新。
- 未填写生日、时辰、地区的新账号保持空值,不使用预览资料冒充真实账号。
- 登录凭证失效后清除本地会话;失效头像链接通过资料接口刷新,不在前端签名 COS 文件。
- 天宫绑定等已有隔离 Mock 未改成真实后端业务。本次没有提交或推送代码。
## 当前默认部署地址
- 前端默认 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 合法域名;本次未修改远程服务器、后端配置或存储权限。
## 本地入口与启动
- 前端:`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,不持久化临时签名为对象身份。
## 已验证与边界
- 前端自动测试 59 项通过(包含远端 API 前缀与本地覆盖、日主五行入口图标、隔离头像演示、编辑页样式作用域及 WXSS 兼容回归测试),TypeScript 检查、H5 和微信构建通过。13 个产物 WXSS 均通过本机微信开发者工具自带 `wcsc` 的原生编译检查;这不替代真实登录/上传验收。
- 后端干净构建默认执行的 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 联调需用户在开发者工具授权验收。未改动生产域名或伪造注册凭证。