Files
core/.workbuddy/memory/2026-08-10.md
T
gxwebsoft c585647dec fix(auth): 修复支付密码重置与前端权限显示问题
- 修正 resetPayPasswordBySms 短信码判定逻辑,分离短信码与万能码检查
- 增加日志和提示优化,消除 Redis 无码时的空指针异常
- 支持 resetSMSCode 接口传入自定义码和有效期参数,新增查询当前码接口
- 前端 reset-pay-password 页面改为自动发送验证码,改进发送时机与日志记录
- 调整门店中心菜单权限判定,改用当前登录 SysUser 的管理员标识替代店员 roleType
- 菜单渲染依据 isAdmin 权限过滤,优化非管理员的角标加载逻辑
- 明确前端权限隐藏,提示后端接口需独立权限验证
2026-08-10 20:02:19 +08:00

2.4 KiB
Raw Blame History

2026-08-10 工作记录

1. 支付密码重置(/auth/pay-password)排查与修复(com.gxwebsoft.core 后端)

  • 根因:原 resetPayPasswordBySmsStrUtil.isBlank(cachedCode) 前置短路,未发真实短信时万能码分支永远不执行;运维码 987987 本身也不是系统合法万能码(万能码由 resetSMSCode 生成/指定,原仅 5 分钟随机码)。
  • 修复:短信码与万能码改为独立判定;补 warn 日志与精细化提示;updatePayPassword/loginBySms/AccessKeyController.pageStrUtil.equals 消除 Redis 无码时的 NPE。
  • AccessKeyController.resetSMSCode 现支持可选 code(6位数字) 与 minutes(默认5,上限7天);新增 GET /api/accessKey/currentSMSCode 查当前码。
  • 注意:原 loginBySms 里有 Integer.valueOf(10519).equals(tenantId) ? "170083" 硬编码特例,是另一租户(10519)遗留,与 paopao(租户10198)无关,未改动。

2. 前端 paopao-taro reset-pay-password 自动发码(pages/user/reset-pay-password.tsx

  • 原设计需手动点「获取验证码」。改为进入页面自动发一次。
  • 自动发码 useEffect 依赖由 [phone] 改为 [user, user?.phone]Taro 时序下 refreshUser 回填 phone 可能漏触发),并加 console.warn('[reset-pay] 自动发码检查') 诊断日志(打印 hasPhone/valid/sent/tenantId);silent 模式发码失败也打日志。

3. 门店中心菜单权限(pages/store/center/index.tsx

  • 需求:店员只能看「扫码核销」「穿线订单」,其余功能需管理员(店长/经理)可见。
  • 判定字段(修正):用户要求改用当前登录 SysUser 的权限标识,而非店员 roleType。 isAdmin = Number(user?.isAdmin) === 1 || Number(user?.isSuperAdmin) === 1 user 来自 useUser() / /api/auth/user,后端 SysUser.isAdmin/isSuperAdmin 为 Boolean,用 Number() 兼容 true/1 两种序列化)。
  • 实现:引入 useUserisManager 改名 isAdmin;渲染过滤 FEATURE_CARDS.filter(card => isAdmin || !card.adminOnly)loadBadgeCounts() 改用 isAdmin 跳过非管理员角标加载(不再传 clerk)。
  • 注意:getMyClerk 返回的 ShopStoreUser 实体不包含 sysUser/isAdmin 字段,sysUser 只能从 UserContext/api/auth/user)拿,故此前 roleType 方案是错的。
  • 提醒:此为前端菜单隐藏,非后端权限隔离;若需严格隔离需在子页面也加 isAdmin/isSuperAdmin 校验。