Files
huihuiSquare/overview-avatar-user-isolation-2026-07-21.md
2026-07-24 14:04:21 +08:00

4.2 KiB
Raw Permalink Blame History

会会数字分身 · 用户资料与分身隔离落地说明

问题

用户登录成功后,发现页面显示"已有数字分身",且没有看到当前登录账号的头像/昵称;同时希望在创建数字分身时直接沿用当前会会账号的名称和头像。

根因

  1. 后端 GET /api/avatar 全局返回所有分身,没有按用户隔离;且 backend/main.pyseed() 在数据库为空时会插入一个名为"我的数字分身"的种子记录。任何新登录用户都会看到它。
  2. 用户头像/昵称虽然已经在登录响应中返回并落库存入 users 表,但仪表盘没有展示
  3. AvatarCreate.vue 只预填了昵称到 displayName,没有 photoUrl 字段,也没有头像预览。

改动

后端:分身按用户隔离

  • backend/models.py
    • Avatar 新增 owner_id 字段(会会 huihui_user_id),索引,默认空字符串。
    • to_dict() 暴露 ownerId
  • backend/database.py
    • _try_add_columns 中加入 ("avatars", "owner_id", "VARCHAR DEFAULT ''"),容器启动时自动给已有 SQLite 表加列。
  • backend/routers/avatars.py
    • 新增 _resolve_user()Authorization: Bearer <app_token> 解析当前用户。
    • GET /api/avatar 仅返回 owner_id == user.huihui_user_id 的分身;无/无效 token 返回空列表。
    • POST /api/avatar 创建时写入当前用户的 owner_id

前端:仪表盘展示用户资料头

  • src/views/AvatarManage.vue
    • 引入 useUserStore
    • 顶部新增用户资料头:圆形头像(userStore.user.avatarUrl,无则 emoji 回退)+ 昵称 + 登录状态/手机号。
    • 分身卡片优先显示真实头像 photoUrl,无则回退 emoji。

前端:创建分身预填名称与头像

  • src/views/AvatarCreate.vue
    • 表单新增 photoUrl
    • onMountedavatarStore.userProfile || userStore.user 预填 namedisplayNamephotoUrl
    • Step1 新增"分身头像"预览区与"已沿用你的会会头像"提示。
    • 确认页显示用户头像(或 emoji 回退)。
    • 提交时携带 photoUrl
    • 引导页"已有数字分身?"文案改为 v-if="avatarStore.avatars.length > 0",避免新用户被误导。

Ardot 视觉稿

  • 新建「会会数字分身-仪表盘与创建页」(fileId: 706241841026616)。
  • 包含两屏:
    1. 数字分身管理仪表盘状态栏、橙头、用户资料头、Token 余额、分身卡片、工具入口)。
    2. 创建数字分身 Step1头像预览、预填名称/显示名称、描述、下一步)。
  • 沿用 Glass Sunset Warm 品牌色系(#FFF6EC 背景、#FF8C42 主色、#4A2511 文字)。

部署

  • 前端:./node_modules/.bin/vite buildrsync dist/docker cpavatar-test-frontend → restart。
  • 后端:rsync models.py / database.py / routers/avatars.pydocker cpavatar-test-backend → restart启动时自动迁移 owner_id 列。

验证结果(容器内实测)

检查项 结果
owner_id 列已迁移
种子分身 owner_id=''
无 auth GET /api/avatar {data:[],total:0}
登录用户 GET /api/avatar {data:[],total:0}(种子隐藏)
创建分身写入 ownerId + photoUrl
创建后本人列表只含 1 条
删除后列表回归空

用户现在体验

  1. 登录后进入 /#/(创建引导)或 /#/avatar/manage(仪表盘),顶部会显示当前会会账号的头像和昵称
  2. 新用户首次登录时,不会看到任何"已有"分身(列表为空)。
  3. 点"立即创建一个"进入创建流程,名称和头像已经自动预填了当前用户的会会昵称和头像。
  4. 创建成功后,仪表盘只显示用户自己创建的分身。

访问地址

测试环境(同网段/隧道可达):

  • 创建引导页:http://192.168.1.188:8099/#/
  • 仪表盘:http://192.168.1.188:8099/#/avatar/manage
  • 登录页:http://192.168.1.188:8099/#/login/sms

后续可选

  • 生产环境切到 99hui.com 后可真正下发短信;当前 fat-open 预发环境建议继续用账号密码登录。
  • 可在创建页支持用户上传/裁剪自定义头像,替代目前直接沿用会会头像的方案。