From c4177f167dc948f7c325b8905a4ad76d0795f43c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com> Date: Wed, 5 Aug 2026 11:15:27 +0800 Subject: [PATCH] =?UTF-8?q?fix(system):=20=E4=BF=AE=E6=AD=A3=E6=94=AF?= =?UTF-8?q?=E4=BB=98=E5=AF=86=E7=A0=81=E9=87=8D=E7=BD=AE=E6=97=B6=E9=AA=8C?= =?UTF-8?q?=E8=AF=81=E7=A0=81=E8=AF=BB=E5=8F=96=E4=B8=8E=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 统一使用 redisUtil 读取短信验证码,解决租户前缀不一致问题 - 修改验证码缓存key为 "code:" + 手机号,保持与 updatePayPassword 一致 - 验证码校验时同时支持开发环境验证码 - 重置成功后从 redisUtil 删除对应验证码缓存 - 移除原先使用 cacheClient 的验证码读取和删除操作 --- .../common/system/controller/MainController.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/gxwebsoft/common/system/controller/MainController.java b/src/main/java/com/gxwebsoft/common/system/controller/MainController.java index 7818e48..47dbe40 100644 --- a/src/main/java/com/gxwebsoft/common/system/controller/MainController.java +++ b/src/main/java/com/gxwebsoft/common/system/controller/MainController.java @@ -623,8 +623,11 @@ public class MainController extends BaseController { if (!param.getPhone().equals(loginUser.getPhone())) { return fail("手机号与当前账号不一致"); } - // 验证码校验:sendSmsCaptcha 将验证码存于 cacheClient(key 为手机号),校验时须对应读取 - String cachedCode = cacheClient.get(param.getPhone(), String.class); + // 验证码校验:sendSmsCaptcha 将验证码同时写入 redisUtil("code:" + 手机号,无租户前缀) 与 + // cacheClient(带租户前缀)。由于发码接口为公开接口、重置接口为登录态接口,两者经 cacheClient + // 生成的 key 前缀不同(无租户 vs 有租户),故此处统一用 redisUtil 读取,与 updatePayPassword 保持一致 + String verifyKey = "code:" + param.getPhone(); + String cachedCode = redisUtil.get(verifyKey); String devCode = redisUtil.get(CACHE_KEY_VERIFICATION_CODE_BY_DEV_SMS); if (StrUtil.isBlank(cachedCode) || (!param.getCode().equals(cachedCode) && !param.getCode().equals(devCode))) { return fail("短信验证码不正确"); @@ -635,7 +638,7 @@ public class MainController extends BaseController { update.setPayPassword(userService.encodePassword(param.getPayPassword())); if (userService.updateById(update)) { // 核销已使用的验证码 - cacheClient.delete(param.getPhone()); + redisUtil.delete(verifyKey); return success("支付密码重置成功"); } return fail("重置失败");