fix(system): 修正支付密码重置时验证码读取与删除逻辑

- 统一使用 redisUtil 读取短信验证码,解决租户前缀不一致问题
- 修改验证码缓存key为 "code:" + 手机号,保持与 updatePayPassword 一致
- 验证码校验时同时支持开发环境验证码
- 重置成功后从 redisUtil 删除对应验证码缓存
- 移除原先使用 cacheClient 的验证码读取和删除操作
This commit is contained in:
2026-08-05 11:15:27 +08:00
parent 2581a77f09
commit c4177f167d

View File

@@ -623,8 +623,11 @@ public class MainController extends BaseController {
if (!param.getPhone().equals(loginUser.getPhone())) {
return fail("手机号与当前账号不一致");
}
// 验证码校验sendSmsCaptcha 将验证码存于 cacheClientkey 为手机号),校验时须对应读取
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("重置失败");