fix: 每日进销存截图改用系统库专用服务账号身份 #42
Loading…
x
Reference in New Issue
Block a user
No description provided.
Delete Branch "codex/daily-inventory-notify-identity-0927"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
问题
PR #33 的定时截图通知上线后,端到端验证发现截图永远失败:等待页面数据行 3 分钟超时。
排查结论是截图身份不被前端认可,而不是页面或接口本身有问题(接口返回 26 个仓库,
真实浏览器打开页面 5.6 秒完成渲染,无 console 错误)。
/api/auth/verify会执行getResolvedUserWithPageAccess(decoded.sub),要求令牌的
sub是系统库users表中真实且active的用户;sub='daily-inventory-screenshot-bot'的合成身份,用户表里没有这一行;401 {"valid":false},前端清除令牌并跳转/login,截图因此拿不到任何数据。处理
在系统库维护一个仅供服务端使用的专用账号(
auth_source=service),令牌sub使用其 id:role=admin、status=active、auth_source=service创建;auth_source=service的本服务账号补齐管理员与启用状态,不触碰人工账号;用户名可用环境变量
DAILY_INVENTORY_SCREENSHOT_USERNAME覆盖,默认daily_inventory_screenshot_bot。影响范围
backend/src/services/dailyInventoryScreenshot.js:新增服务账号维护与令牌签发改造;backend/test/dailyInventoryNotification.test.js:新增 2 项测试(账号创建/复用、令牌 sub 校验)。未改动鉴权中间件与
/api/auth/verify语义,未改动数据库表结构,新增数据仅 1 行服务账号。验证
node --test test/dailyInventoryNotification.test.js:19/19 通过;npm --prefix backend run check:366/367 通过,唯一失败为既有的resilientSecretStoreWindows 文件权限用例,与本改动无关;
部署后仍需验证:在页面点击「立即测试」确认截图上传成功并返回可访问的 HTTPS 地址。