feat: 页面头部账户下拉展示当前用户信息 - #36
Conversation
|
关于 CodeQL 的 3 条 js/xss 高危告警(
CodeQL 的污点模型不识别自定义协议校验函数,因此仍标记这 3 行。烦请有仓库写权限的同学在 code scanning 中将这 3 条标记为 false positive 处理;若贵方有惯用的通过模式(如统一的图片 URL 工具函数),也欢迎指出,我按此调整。 |
|
[P1] 点击解除一个身份,会删除该渠道下的全部身份绑定 [P2] 渠道身份作用域前后端契约不完整 [P2] 上传预览的 Blob URL 没有被正确释放 [P2] 2MB 限制是在完整读入内存后才检查 |
|
感谢复核,四条意见已全部处理(commit c209ebc): [P1] 点击解除一个身份,会删除该渠道下的全部身份绑定 [P2] 渠道身份作用域前后端契约不完整 [P2] 上传预览的 Blob URL 没有被正确释放 [P2] 2MB 限制是在完整读入内存后才检查 验证:后端全量 999 passed、ruff 通过;前端 build 与 i18n:check 通过。 |
- AppHeader 下拉顶部新增用户卡片:大头像/显示名/@用户名/ 角色徽章(管理员/成员)/admin 可见租户 - 组件内读 auth session,零页面调用点改动;无 session 时与现状一致 - 全站此前无任何用户信息展示(官方最新代码亦缺失)
- 后端:user_avatars 独立小表(data_url 存库), PUT/DELETE /api/auth/me/avatar(字节头嗅探防伪装,≤2MB), login 与 auth/me 返回 avatar_url - 前端:用户卡片更换头像(选图-预览-保存)与移除头像, 上传后刷新会话,AppHeader 有图显图无图回首字母 - 浏览器实测上传全流程通过
打开文件对话框前清空 input.value,确保用户多次选择 同一图片时预览与保存流程始终可用
- 文件 input 移出下拉菜单常驻 header 根部,菜单关闭不再卸载 input - 预览/保存改为独立 Dialog,下拉菜单因系统对话框失焦关闭也不影响流程 - 修复真实桌面环境(非 Playwright)选图后无任何反馈的问题
img src 动态值限制为 http(s)/data:image/blob 协议, 修复 3 处 js/xss 高危告警
- 选择图片后立即上传并乐观渲染,带上传中指示 - 失败自动回滚并提示;移除预览/保存独立弹窗
- AppHeader 预览 blob URL 改 ref 跟踪,替换/清除/组件卸载均正确 revoke, 不受 pickAvatar 闭包旧 state 快照影响 - 头像上传先按 Content-Length 预检(>2MB+64KB 直接 413),再限量读取 (最多 MAX+1 字节)硬兜底,超限不再完整读入内存 - 回归测试:Content-Length 预检路径 413
c209ebc to
e1da611
Compare
|
冲突已解决:分支已 rebase 到最新 main(cd64f92),当前 GitHub 显示 MERGEABLE。 说明一下本次 rebase 的结构变化:
验证:后端 1190 passed、ruff 通过;前端 build 通过。 另外报告两个 main 上已存在、与本 PR 无关 的问题(在纯净 main 上同样复现,未在本 PR 中修复以免扩大范围):
|
|
[P1] [P2] 删除用户不会删除头像记录 |
- login/me/上传响应的 avatar_url 一律为资源指针 /api/auth/me/avatar, 不再内联 base64 二进制(原 2MB 图≈2.67MB JSON 会把 localStorage 撑爆,QuotaExceededError 还被登录页误报为账号密码错误) - 新增 GET /me/avatar 字节端点(content-type 嗅探+no-cache), 前端凭指针用认证请求拉字节转 blob URL 渲染;blob 生命周期沿用 ref 跟踪(替换/卸载均 revoke) - setEnterpriseAuthSession 存储异常降级重试,最终抛真实原因, 不再被误报为凭据错误 - delete_user 显式级联删除 UserAvatar,不留孤儿记录 - 测试:指针契约/字节端点(200/404/401)/覆盖写/级联删除共 12 例
|
感谢复核,两条意见已全部处理(commit df35e05): [P1] 头像内联进 login/me + localStorage 撑爆、误报为凭据错误 按"更理想"方案实施,二进制不再出现在 login/me 响应和会话存储里:
[P2] 删除用户不删头像记录
验证:后端全量 1193 passed(test_user_avatar 12 例覆盖指针契约/字节端点 200·404·401/覆盖写/级联删除/大小预检)、ruff 通过;前端 build 通过,新增文案已入 en.json。i18n:check 的 38 条未翻译与 |
概述
页面头部账户下拉此前只有「退出登录」一项,全站没有任何地方展示当前登录用户(官方最新代码同样缺失)。本 PR 在下拉顶部新增用户卡片。
实现
AppHeader.tsx下拉顶部新增用户卡片:大头像(显示名首字母)+ 显示名 +@username+ 角色徽章(管理员/成员)+ admin 可见租户 ID;分隔线下保留原「退出登录」;getEnterpriseAuthSession()),零页面调用点改动;userNameprop 仅作头像兜底;验证
npm run build通过;npm run i18n:check仅剩 main 基线存量缺失(WorkRecordTab 一条,与本 PR 无关,feat: 渠道可靠性与工程强化(遗留项 P0-P3) #33 已覆盖修复)。单 commit,2 个文件(AppHeader.tsx、en.json),与渠道工作完全独立。