2.4 KiB
2.4 KiB
创建分身未预填登录昵称 — 根因与修复
现象
登录成功后,进入「创建数字分身」,分身名称 / 显示名称没有默认填入当前登录用户的昵称; 而仪表盘(数字分身管理)却正常显示该昵称。两者读数不一致。
根因(前端取值优先级 bug)
AvatarCreate.vue 的 onMounted 原逻辑:
const profile = avatarStore.userProfile || userStore.user
const nick = profile?.nickname
avatarStore.userProfile是一个 truthy 对象(即使昵称为空字符串),会抢在真正含昵称的userStore.user(登录会话 + localStorage 持久化)之前被选中。src/main.ts在应用启动时执行setNativeProfile({ nickname: userStore.user.nickname || '' }): 当 localStorage 里是旧会话、昵称为空时,会把一个「空昵称对象」写进userProfile。- 于是
profile.nickname === '',创建页不预填;仪表盘直接读userStore.user所以照常显示。
DB 实证:avatar-test 容器内 /app/avatar.db 的 users 表确有真实昵称(如 猜猜我是谁)与真实头像
URL —— 数据本身没问题,纯前端取值优先级问题。
修复
文件:digital-avatar-app/src/views/AvatarCreate.vue
onMounted改为 优先userStore.user,avatarStore.userProfile仅作兜底:const real = userStore.user const native = avatarStore.userProfile const nick = real?.nickname || native?.nickname || '' const avatar = real?.avatarUrl || native?.avatarUrl || ''userAvatarUrl计算属性同样改为优先userStore.user.avatarUrl。- 兜底:本地两者皆空且已登录时,调用
getCurrentUser()(GET /huihui/me,读 DB 权威值)补拉真实昵称/头像。
部署与验证
./node_modules/.bin/vite build→ 新 chunkAvatarCreate-CNMENOcc.js- 部署到测试环境
geo-server:rsync dist/→docker cp进avatar-test-frontend:/usr/share/nginx/html/ - 容器内清理旧 AvatarCreate 孤儿 chunk(
Bw_iuiqc.js等多份历史残留) - 验证:首页 HTTP 200;线上 chunk 含
displayName预填逻辑
经验
前端「当前用户资料」应统一以 userStore.user(登录会话、localStorage 持久化)为权威源;
avatarStore.userProfile(原生壳注入 / 启动桥接)是可空、可被空值覆盖的派生源,绝不能放在 || 左侧优先。