3.8 KiB
3.8 KiB
name, description, metadata
| name | description | metadata | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| session-20260628-1 | 2026-06-28 第1次会话 — 登录后头像下载接口重复调用三轮排查修复 |
|
2026-06-28 会话
会话摘要
用户反馈登录成功后 /open/token 和 https://file.wg.zgitm.com/api/download 接口被重复调用。经过三轮排查,发现根因是 login() + fetchUserInfo()(SystemSelectView/AdminLayout)重复刷新头像 Token。最终方案:login() 刷新头像(确保 <el-avatar> 加载时 URL 已有 Token),fetchUserInfo() 增加去重逻辑(同一文件复用已有 URL),共 3 次部署到生产环境。
关键操作
一、第一轮修复 — 删除 login() 中的头像刷新
- 做了什么: 删除
auth.tslogin() 中的refreshFileServiceUrl()调用 - 原因: login() 和 fetchUserInfo() 各刷新一次,导致 2 次 /open/token + 2 次 download
- 结果: ❌ 引入新问题——login() 不刷新后,
<el-avatar>先用无 Token 的 URL 发起失败请求,fetchUserInfo() 再发一次成功请求
二、第二轮修复 — fetchUserInfo() 增加去重 + 恢复 login() 刷新
- 做了什么:
fetchUserInfo()中比较当前 store 中的 avatar(去 Token)和新获取的 avatar(去 Token),相同文件则复用已有 URL- 恢复
login()中的头像刷新
- 原因: 用户发现 admin 登录后 download 接口仍被调用 2 次:SystemSelectView 一次 → AdminLayout 又一次
- 结果: ✅ 达到 1 次 /open/token + 1 次 download
三、最终代码改动
文件: mokee-gateway-web/src/stores/auth.ts
login() 最终版 — 保留头像刷新:
// 立即刷新头像 Token — 否则跳转后 <el-avatar> 先用无 Token 的 URL
// 发起一次失败请求,等 fetchUserInfo() 拿到 Token 后又发起第二次
// fetchUserInfo() 中有去重逻辑,不会重复刷新同一文件
let userInfoData = data.userInfo
if (userInfoData?.avatar && isFileServiceUrl(userInfoData.avatar)) {
userInfoData = { ...userInfoData, avatar: await refreshFileServiceUrl(userInfoData.avatar) }
}
userInfo.value = userInfoData
fetchUserInfo() 最终版 — 增加去重:
const prevBase = stripToken(userInfo.value?.avatar || '')
const newBase = stripToken(data?.avatar || '')
if (data?.avatar && isFileServiceUrl(data.avatar) && prevBase !== newBase) {
data = { ...data, avatar: await refreshFileServiceUrl(data.avatar) }
} else if (data?.avatar && isFileServiceUrl(data.avatar) && prevBase === newBase) {
// 同一文件,复用已有的带 Token 的 URL
data = { ...data, avatar: userInfo.value?.avatar || data.avatar }
}
部署记录
- 服务器: 10.1.1.170(内网)
- 前端容器:
mokeegateway-web-mokee-gateway-web(nginx:stable-alpine,端口 80→5001) - 部署方式:
npm run build:prod→ SFTP 上传 dist →docker cp替换容器内/usr/share/nginx/html/→docker exec nginx -s reload - 共部署 3 次,最终版本已验证 HTTP 200
重要信息
- 生产 Docker 容器列表(10.1.1.170):
mokeegateway-web-mokee-gateway-web— 前端mokeegateway-mokee-gateway-gateway— 网关mokeegateway-mokee-gateway-auth— 认证mokeegateway-mokee-gateway-admin— 管理
- 文件服务域名:
file.wg.zgitm.com,下载 Token 一次性消费 - 头像存储在文件服务中,DB 只存基础路径,每次加载页面需获取 Token 并拼接完整 URL
待处理
- 生产环境验证:用 admin 用户登录,确认只调用 1 次 /open/token 和 1 次 download
- 容器内旧 JS chunk 文件会累积(docker cp 不删除旧文件),长期需增加清理步骤