From 748f17b777b692fecb8ba11abee7b4bfe12be669 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=89=91=E9=9B=A8?= <2375294554@qq.com> Date: Sun, 18 May 2025 18:44:11 +0800 Subject: [PATCH 1/9] =?UTF-8?q?=E5=BC=80=E5=90=AF=E6=89=8B=E6=9C=BA?= =?UTF-8?q?=E6=B3=A8=E5=86=8C=EF=BC=8C=E9=AA=8C=E8=AF=81=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E4=B8=8D=E5=8F=AF=E4=BB=A5=E4=B8=BA=E7=A9=BA?= =?UTF-8?q?=20--SysParamsServiceImpl.java=20=E5=BC=80=E5=90=AF=E6=89=8B?= =?UTF-8?q?=E6=9C=BA=E6=B3=A8=E5=86=8C=E5=8F=82=E6=95=B0=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E9=AA=8C=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SysParamsServiceImpl.java | 43 ++++++++++++++++--- 1 file changed, 38 insertions(+), 5 deletions(-) diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysParamsServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysParamsServiceImpl.java index 2187a8b4..a72b94f4 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysParamsServiceImpl.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysParamsServiceImpl.java @@ -1,9 +1,6 @@ package xiaozhi.modules.sys.service.impl; -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import java.util.UUID; +import java.util.*; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -82,7 +79,7 @@ public class SysParamsServiceImpl extends BaseServiceImpl list = new ArrayList(); + list.add(Constant.SysMSMParam.SYSTEM_SMS_MAX_SEND_COUNT.getValue()); + list.add(Constant.SysMSMParam.ALIYUN_SMS_ACCESS_KEY_ID.getValue()); + list.add(Constant.SysMSMParam.ALIYUN_SMS_ACCESS_KEY_SECRET.getValue()); + list.add(Constant.SysMSMParam.ALIYUN_SMS_SIGN_NAME.getValue()); + list.add(Constant.SysMSMParam.ALIYUN_SMS_SMS_CODE_TEMPLATE_CODE.getValue()); + StringBuilder str = new StringBuilder(); + list.forEach( item -> { + if (!StringUtils.isNoneBlank(item)) { + str.append(",").append(item); + } + }); + if (!str.isEmpty()) { + String promptStr = "%s这些参数不可以为空"; + String substring = str.substring(1, str.length()); + throw new RenException(promptStr.formatted(substring)); + } + return true; + } } \ No newline at end of file From 0cdfd1d114f44f6812dc302cde9257068b06a39d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=89=91=E9=9B=A8?= <2375294554@qq.com> Date: Mon, 19 May 2025 10:41:02 +0800 Subject: [PATCH 2/9] =?UTF-8?q?=E6=96=B0=E5=BB=BA=E8=B5=84=E6=BA=90?= =?UTF-8?q?=E8=AF=BB=E5=8F=96=E5=B7=A5=E5=85=B7=E7=B1=BB=20--ResourcesUtil?= =?UTF-8?q?s.java=20=E8=AF=BB=E5=8F=96=E8=B5=84=E6=BA=90=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E5=88=B0=E5=AD=97=E7=AC=A6=E4=B8=B2=E7=9A=84=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xiaozhi/common/utils/ResourcesUtils.java | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 main/manager-api/src/main/java/xiaozhi/common/utils/ResourcesUtils.java diff --git a/main/manager-api/src/main/java/xiaozhi/common/utils/ResourcesUtils.java b/main/manager-api/src/main/java/xiaozhi/common/utils/ResourcesUtils.java new file mode 100644 index 00000000..49d9a727 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/common/utils/ResourcesUtils.java @@ -0,0 +1,44 @@ +package xiaozhi.common.utils; + +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.io.ResourceLoader; +import org.springframework.core.io.Resource; +import org.springframework.stereotype.Component; +import xiaozhi.common.exception.RenException; + + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +/** + * 资源处理工具 + */ +@AllArgsConstructor +@Slf4j +@Component +public class ResourcesUtils { + private ResourceLoader resourceLoader; + + /** + * 读取资源,返回字符串 + * @param fileName 资源路径:resources下开始 + * @return 字符串 + */ + public String loadString(String fileName) { + Resource resource = resourceLoader.getResource("classpath:" + fileName); + StringBuilder luaScriptBuilder = new StringBuilder(); + try (BufferedReader reader = new BufferedReader( + new InputStreamReader(resource.getInputStream()))) { + String line; + while ((line = reader.readLine()) != null) { + luaScriptBuilder.append(line).append("\n"); + } + } catch (IOException e){ + log.error("方法:loadString()读取资源失败--{}",e.getMessage()); + throw new RenException("读取资源失败"); + } + return luaScriptBuilder.toString(); + } +} From 2761e97c6aac78de6b6829bb7d9881e30f208d63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=89=91=E9=9B=A8?= <2375294554@qq.com> Date: Mon, 19 May 2025 10:46:59 +0800 Subject: [PATCH 3/9] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E5=9C=A8redis=E6=8C=87=E5=AE=9Akey=E7=9A=84=E5=80=BC=EF=BC=8C?= =?UTF-8?q?=E5=A6=82=E6=9E=9C=E5=80=BC=E4=B8=BA=E7=A9=BA=EF=BC=8C=E7=9D=80?= =?UTF-8?q?=E8=AE=BE=E7=BD=AEkey=E7=9A=84=E9=BB=98=E8=AE=A4=E5=80=BC?= =?UTF-8?q?=E7=9A=84=E6=96=B9=E6=B3=95=20--RedisUtils.java=20=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E6=96=B0=E6=96=B9=E6=B3=95=20--getKeyOrCreate.lua=20?= =?UTF-8?q?=E6=AD=A4=E6=96=B9=E6=B3=95=E7=9A=84lua=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/xiaozhi/common/redis/RedisUtils.java | 27 +++++++++++++++++++ .../src/main/resources/lua/getKeyOrCreate.lua | 11 ++++++++ 2 files changed, 38 insertions(+) create mode 100644 main/manager-api/src/main/resources/lua/getKeyOrCreate.lua diff --git a/main/manager-api/src/main/java/xiaozhi/common/redis/RedisUtils.java b/main/manager-api/src/main/java/xiaozhi/common/redis/RedisUtils.java index 9115e806..4bf68856 100644 --- a/main/manager-api/src/main/java/xiaozhi/common/redis/RedisUtils.java +++ b/main/manager-api/src/main/java/xiaozhi/common/redis/RedisUtils.java @@ -6,12 +6,14 @@ import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.HashOperations; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.script.DefaultRedisScript; import org.springframework.stereotype.Component; import jakarta.annotation.Resource; +import xiaozhi.common.utils.ResourcesUtils; /** * Redis工具类 @@ -23,6 +25,9 @@ public class RedisUtils { @Resource private RedisTemplate redisTemplate; + @Autowired + private ResourcesUtils resourceUtils; + /** * 默认过期时长为24小时,单位:秒 */ @@ -147,4 +152,26 @@ public class RedisUtils { } + /** + * 获取在redis指定key的值,如果值为空,着设置key的默认值 + * @param key redis的key + * @param defaultValue 默认值 + * @param expiresInSecond 过期时间 + * @return 返回key的值 + */ + public String getKeyOrCreate(String key, String defaultValue,Long expiresInSecond) { + // Lua 脚本 + String luaScript = resourceUtils.loadString("lua/getKeyOrCreate.lua"); + + DefaultRedisScript redisScript = new DefaultRedisScript<>(); + redisScript.setScriptText(luaScript); + redisScript.setResultType(String.class); + + // 执行 Lua 脚本 + List keys = Collections.singletonList(key); + return redisTemplate.execute(redisScript, keys, defaultValue,expiresInSecond); + } + + + } \ No newline at end of file diff --git a/main/manager-api/src/main/resources/lua/getKeyOrCreate.lua b/main/manager-api/src/main/resources/lua/getKeyOrCreate.lua new file mode 100644 index 00000000..bc375b12 --- /dev/null +++ b/main/manager-api/src/main/resources/lua/getKeyOrCreate.lua @@ -0,0 +1,11 @@ +local value = redis.call('GET', KEYS[1]) +-- value 如果为空着设置值 +if not value then + local result = redis.call('SET', KEYS[1], ARGV[1]) + -- 检查 ARGV[2] 是否存在且大于 0 + local expireTime = tonumber(ARGV[2]) + if expireTime and expireTime > 0 then + redis.call('EXPIRE', KEYS[1], expireTime) + end +end +return value \ No newline at end of file From c19084b7b47da2e7f71a8ab20eda7ac1a5675762 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=89=91=E9=9B=A8?= <2375294554@qq.com> Date: Mon, 19 May 2025 10:51:39 +0800 Subject: [PATCH 4/9] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=B9=B6=E5=8F=91?= =?UTF-8?q?=E6=BC=8F=E6=B4=9E=EF=BC=8C=E8=8E=B7=E5=8F=96=E5=92=8C=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E7=9F=AD=E4=BF=A1=E5=8F=91=E9=80=81=E9=97=B4=E9=9A=94?= =?UTF-8?q?=E6=97=B6=E9=97=B4=EF=BC=8C=E4=B8=8D=E6=98=AF=E5=8E=9F=E5=AD=90?= =?UTF-8?q?=E6=80=A7=E7=9A=84=EF=BC=8C=E5=B9=B6=E5=8F=91=E8=AF=B7=E6=B1=82?= =?UTF-8?q?=E8=BF=87=E6=9D=A5=E4=BC=9A=E5=AF=BC=E8=87=B4=E9=AA=8C=E8=AF=81?= =?UTF-8?q?=E6=9C=89=E6=BC=8F=E6=B4=9E=E8=A2=AB=E9=80=9A=E8=BF=87=20--Capt?= =?UTF-8?q?chaServiceImpl.java=20=E8=AE=BE=E7=BD=AE=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E5=92=8C=E8=AE=BE=E7=BD=AE=E5=8F=91=E7=8E=B0=E9=97=B4=E9=9A=94?= =?UTF-8?q?=E7=9A=84=E6=96=B9=E6=B3=95=E4=B8=BA=E5=8E=9F=E5=AD=90=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/security/service/impl/CaptchaServiceImpl.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/main/manager-api/src/main/java/xiaozhi/modules/security/service/impl/CaptchaServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/security/service/impl/CaptchaServiceImpl.java index 09c8a185..98b6d326 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/security/service/impl/CaptchaServiceImpl.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/security/service/impl/CaptchaServiceImpl.java @@ -79,7 +79,10 @@ public class CaptchaServiceImpl implements CaptchaService { public void sendSMSValidateCode(String phone) { // 检查发送间隔 String lastSendTimeKey = RedisKeys.getSMSLastSendTimeKey(phone); - String lastSendTime = (String) redisUtils.get(lastSendTimeKey); + // 获取是否发送过,如果没有设置最后发送时间(60秒) + String lastSendTime = redisUtils + .getKeyOrCreate(lastSendTimeKey, + String.valueOf(System.currentTimeMillis()), 60L); if (lastSendTime != null) { long lastSendTimeLong = Long.parseLong(lastSendTime); long currentTime = System.currentTimeMillis(); @@ -114,9 +117,6 @@ public class CaptchaServiceImpl implements CaptchaService { // 设置验证码 setCache(key, validateCodes); - // 设置最后发送时间(60秒) - redisUtils.set(lastSendTimeKey, String.valueOf(System.currentTimeMillis()), 60); - // 更新今日发送次数 if (todayCount == 0) { // 如果是今天第一次发送,设置24小时过期 From 83c4add3753cf5cce04bbfb2b94535efaf0a6f35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=89=91=E9=9B=A8?= <2375294554@qq.com> Date: Mon, 19 May 2025 11:20:57 +0800 Subject: [PATCH 5/9] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=B8=85=E7=A9=BAredis?= =?UTF-8?q?=E7=9A=84key=E6=96=B9=E6=B3=95=E3=80=82=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=8A=A01=EF=BC=8C=E5=87=8F1=E6=96=B9=E6=B3=95=20--RedisUtils.?= =?UTF-8?q?java=20=E6=96=B0=E7=9A=84=E6=96=B9=E6=B3=95=20--emptyAll.lua=20?= =?UTF-8?q?=E6=B8=85=E7=A9=BAredis=E7=9A=84key=E7=9A=84lua=E8=84=9A?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/xiaozhi/common/redis/RedisUtils.java | 20 ++++++++++++++++++- .../src/main/resources/lua/emptyAll.lua | 1 + 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 main/manager-api/src/main/resources/lua/emptyAll.lua diff --git a/main/manager-api/src/main/java/xiaozhi/common/redis/RedisUtils.java b/main/manager-api/src/main/java/xiaozhi/common/redis/RedisUtils.java index 4bf68856..c81677e9 100644 --- a/main/manager-api/src/main/java/xiaozhi/common/redis/RedisUtils.java +++ b/main/manager-api/src/main/java/xiaozhi/common/redis/RedisUtils.java @@ -45,6 +45,24 @@ public class RedisUtils { */ public final static long NOT_EXPIRE = -1L; + public Long increment(String key, long expire) { + Long increment = redisTemplate.opsForValue().increment(key, 1L); + if (expire != NOT_EXPIRE) { + expire(key, expire); + } + return increment; + } + + public Long increment(String key) { + return redisTemplate.opsForValue().increment(key, 1L); + } + + public Long decrement(String key) { + return redisTemplate.opsForValue().decrement(key, 1L); + } + + + public void set(String key, Object value, long expire) { redisTemplate.opsForValue().set(key, value); if (expire != NOT_EXPIRE) { @@ -139,7 +157,7 @@ public class RedisUtils { */ public void emptyAll() { // Lua 脚本 FLUSHALL是redis清空所有库的命令 - String luaScript ="redis.call('FLUSHALL')"; + String luaScript =resourceUtils.loadString("lua/emptyAll.lua"); // 创建 DefaultRedisScript 对象 DefaultRedisScript redisScript = new DefaultRedisScript<>(); diff --git a/main/manager-api/src/main/resources/lua/emptyAll.lua b/main/manager-api/src/main/resources/lua/emptyAll.lua new file mode 100644 index 00000000..1d984cb7 --- /dev/null +++ b/main/manager-api/src/main/resources/lua/emptyAll.lua @@ -0,0 +1 @@ +redis.call('FLUSHALL') \ No newline at end of file From f242d43f73f3de06cc5d3e36973b6600f207f33f Mon Sep 17 00:00:00 2001 From: Sakura-RanChen <1908198662@qq.com> Date: Mon, 19 May 2025 14:15:28 +0800 Subject: [PATCH 6/9] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=89=BE=E5=9B=9E?= =?UTF-8?q?=E5=AF=86=E7=A0=81=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main/manager-web/src/apis/module/user.js | 24 ++ main/manager-web/src/router/index.js | 7 + main/manager-web/src/views/login.vue | 4 + .../src/views/retrievePassword.vue | 274 ++++++++++++++++++ 4 files changed, 309 insertions(+) create mode 100644 main/manager-web/src/views/retrievePassword.vue diff --git a/main/manager-web/src/apis/module/user.js b/main/manager-web/src/apis/module/user.js index 1ad28b2e..6c16c3e6 100755 --- a/main/manager-web/src/apis/module/user.js +++ b/main/manager-web/src/apis/module/user.js @@ -169,4 +169,28 @@ export default { }); }).send(); }, + // 找回用户密码 + retrievePassword(passwordData, callback, failCallback) { + RequestService.sendRequest() + .url(`${getServiceUrl()}/user/retrieve-password`) + .method('PUT') + .data({ + phone: passwordData.phone, + code: passwordData.code, + password: passwordData.password + }) + .success((res) => { + RequestService.clearRequestTime(); + callback(res); + }) + .fail((err) => { + RequestService.clearRequestTime(); + failCallback(err); + }) + .networkFail(() => { + RequestService.reAjaxFun(() => { + this.retrievePassword(passwordData, callback, failCallback); + }); + }).send() + } } diff --git a/main/manager-web/src/router/index.js b/main/manager-web/src/router/index.js index a19b4ec6..49ee7e4c 100644 --- a/main/manager-web/src/router/index.js +++ b/main/manager-web/src/router/index.js @@ -39,6 +39,13 @@ const routes = [ return import('../views/register.vue') } }, + { + path: '/retrieve-password', + name: 'RetrievePassword', + component: function () { + return import('../views/retrievePassword.vue') + } + }, // 设备管理页面路由 { path: '/device-management', diff --git a/main/manager-web/src/views/login.vue b/main/manager-web/src/views/login.vue index f082721e..2cc42e45 100644 --- a/main/manager-web/src/views/login.vue +++ b/main/manager-web/src/views/login.vue @@ -56,6 +56,7 @@
新用户注册
+
忘记密码?
@@ -214,6 +215,9 @@ export default { goToRegister() { goToPage('/register') }, + goToForgetPassword() { + goToPage('/retrieve-password') + }, } } diff --git a/main/manager-web/src/views/retrievePassword.vue b/main/manager-web/src/views/retrievePassword.vue new file mode 100644 index 00000000..49b8c1e4 --- /dev/null +++ b/main/manager-web/src/views/retrievePassword.vue @@ -0,0 +1,274 @@ + + + + + From c936372105454118405ab72672a957f6bbd821e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=89=91=E9=9B=A8?= <2375294554@qq.com> Date: Mon, 19 May 2025 14:41:53 +0800 Subject: [PATCH 7/9] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=8F=91=E9=80=81?= =?UTF-8?q?=E7=9F=AD=E4=BF=A1=E5=A4=B1=E8=B4=A5=E7=9A=84=E6=83=85=E5=86=B5?= =?UTF-8?q?=EF=BC=8C=E5=9B=9E=E9=80=80=E5=8F=91=E9=80=81=E6=AC=A1=E6=95=B0?= =?UTF-8?q?=20--ALiYunSmsService.java=20=E4=BD=BF=E7=94=A8redis=E5=8A=A01?= =?UTF-8?q?=E5=8E=9F=E5=AD=90=E6=93=8D=E4=BD=9C=20--CaptchaServiceImpl.jav?= =?UTF-8?q?a=20=E4=BD=BF=E7=94=A8redis=E5=87=8F1=E5=8E=9F=E5=AD=90?= =?UTF-8?q?=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../security/service/impl/CaptchaServiceImpl.java | 5 ++--- .../modules/sms/service/imp/ALiYunSmsService.java | 9 +++++++++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/main/manager-api/src/main/java/xiaozhi/modules/security/service/impl/CaptchaServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/security/service/impl/CaptchaServiceImpl.java index 98b6d326..121e3492 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/security/service/impl/CaptchaServiceImpl.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/security/service/impl/CaptchaServiceImpl.java @@ -119,10 +119,9 @@ public class CaptchaServiceImpl implements CaptchaService { // 更新今日发送次数 if (todayCount == 0) { - // 如果是今天第一次发送,设置24小时过期 - redisUtils.set(todayCountKey, 1, RedisUtils.DEFAULT_EXPIRE); + redisUtils.increment(todayCountKey,RedisUtils.DEFAULT_EXPIRE); } else { - redisUtils.set(todayCountKey, todayCount + 1, RedisUtils.DEFAULT_EXPIRE); + redisUtils.increment(todayCountKey); } // 发送验证码短信 diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sms/service/imp/ALiYunSmsService.java b/main/manager-api/src/main/java/xiaozhi/modules/sms/service/imp/ALiYunSmsService.java index b39b24c8..9acc2127 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sms/service/imp/ALiYunSmsService.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sms/service/imp/ALiYunSmsService.java @@ -10,7 +10,10 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import xiaozhi.common.constant.Constant; import xiaozhi.common.exception.RenException; +import xiaozhi.common.redis.RedisKeys; +import xiaozhi.common.redis.RedisUtils; import xiaozhi.modules.sms.service.SmsService; +import xiaozhi.modules.sms.service.common.SmsUtils; import xiaozhi.modules.sys.service.SysParamsService; @Service @@ -18,9 +21,12 @@ import xiaozhi.modules.sys.service.SysParamsService; @Slf4j public class ALiYunSmsService implements SmsService { private final SysParamsService sysParamsService; + private final SmsUtils smsUtils; + private final RedisUtils redisUtils; @Override public void sendVerificationCodeSms(String phone, String VerificationCode) { + smsUtils.isPhoneEligibleForSmsSend(phone,true); Client client = createClient(); String SignName = sysParamsService.getValue(Constant.SysMSMParam .ALIYUN_SMS_SIGN_NAME.getValue(),true); @@ -37,6 +43,9 @@ public class ALiYunSmsService implements SmsService { SendSmsResponse sendSmsResponse = client.sendSmsWithOptions(sendSmsRequest, runtime); log.info("发送短信响应的requestID: {}", sendSmsResponse.getBody().getRequestId()); } catch (Exception e) { + // 如果发送失败了退还这次发送数 + String todayCountKey = RedisKeys.getSMSTodayCountKey(phone); + redisUtils.delete(todayCountKey); // 错误 message log.error(e.getMessage()); throw new RenException("短信发送失败"); From f0e55037de1ba1102fd045afd9ab053708bdc201 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=89=91=E9=9B=A8?= <2375294554@qq.com> Date: Mon, 19 May 2025 18:33:02 +0800 Subject: [PATCH 8/9] =?UTF-8?q?=E5=89=94=E9=99=A4=E5=B7=B2=E7=BB=8F?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E7=9A=84=E7=B1=BB=E7=9A=84=E5=BC=95=E7=94=A8?= =?UTF-8?q?=E5=92=8C=E4=BD=BF=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/xiaozhi/modules/sms/service/imp/ALiYunSmsService.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sms/service/imp/ALiYunSmsService.java b/main/manager-api/src/main/java/xiaozhi/modules/sms/service/imp/ALiYunSmsService.java index 9acc2127..e0ebb523 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sms/service/imp/ALiYunSmsService.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sms/service/imp/ALiYunSmsService.java @@ -13,7 +13,6 @@ import xiaozhi.common.exception.RenException; import xiaozhi.common.redis.RedisKeys; import xiaozhi.common.redis.RedisUtils; import xiaozhi.modules.sms.service.SmsService; -import xiaozhi.modules.sms.service.common.SmsUtils; import xiaozhi.modules.sys.service.SysParamsService; @Service @@ -21,12 +20,10 @@ import xiaozhi.modules.sys.service.SysParamsService; @Slf4j public class ALiYunSmsService implements SmsService { private final SysParamsService sysParamsService; - private final SmsUtils smsUtils; private final RedisUtils redisUtils; @Override public void sendVerificationCodeSms(String phone, String VerificationCode) { - smsUtils.isPhoneEligibleForSmsSend(phone,true); Client client = createClient(); String SignName = sysParamsService.getValue(Constant.SysMSMParam .ALIYUN_SMS_SIGN_NAME.getValue(),true); From 848f73715f95629cedba444482558b73329a5445 Mon Sep 17 00:00:00 2001 From: hrz <1710360675@qq.com> Date: Mon, 19 May 2025 21:19:24 +0800 Subject: [PATCH 9/9] =?UTF-8?q?update=EF=BC=9A=E5=AE=8C=E6=88=90=E5=AF=86?= =?UTF-8?q?=E7=A0=81=E6=89=BE=E5=9B=9E=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/security/config/ShiroConfig.java | 1 + .../security/controller/LoginController.java | 6 +- .../service/impl/CaptchaServiceImpl.java | 2 +- .../sys/service/impl/SysUserServiceImpl.java | 4 + main/manager-web/src/views/login.vue | 4 +- main/manager-web/src/views/register.vue | 1 + .../src/views/retrievePassword.vue | 103 +++++++++--------- 7 files changed, 64 insertions(+), 57 deletions(-) diff --git a/main/manager-api/src/main/java/xiaozhi/modules/security/config/ShiroConfig.java b/main/manager-api/src/main/java/xiaozhi/modules/security/config/ShiroConfig.java index 663adca0..c015240f 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/security/config/ShiroConfig.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/security/config/ShiroConfig.java @@ -84,6 +84,7 @@ public class ShiroConfig { filterMap.put("/user/login", "anon"); filterMap.put("/user/pub-config", "anon"); filterMap.put("/user/register", "anon"); + filterMap.put("/user/retrieve-password", "anon"); // 将config路径使用server服务过滤器 filterMap.put("/config/**", "server"); filterMap.put("/agent/chat-history/report", "server"); diff --git a/main/manager-api/src/main/java/xiaozhi/modules/security/controller/LoginController.java b/main/manager-api/src/main/java/xiaozhi/modules/security/controller/LoginController.java index d0d84e66..47fd7b1b 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/security/controller/LoginController.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/security/controller/LoginController.java @@ -174,19 +174,19 @@ public class LoginController { // 验证用户是否是手机号码 boolean validPhone = ValidatorUtils.isValidPhone(dto.getPhone()); if (!validPhone) { - throw new RenException("用户名不是手机号码,无法提供找回密码服务"); + throw new RenException("输入的手机号码格式不正确"); } // 按照用户名获取用户 SysUserDTO userDTO = sysUserService.getByUsername(dto.getPhone()); if (userDTO == null) { - throw new RenException("用户名或验证码错误"); + throw new RenException("输入的手机号码未注册"); } // 验证短信验证码是否正常 boolean validate = captchaService.validateSMSValidateCode(dto.getPhone(), dto.getCode(), false); // 判断是否通过验证 if (!validate) { - throw new RenException("用户名或验证码错误"); + throw new RenException("输入的手机验证码错误"); } sysUserService.changePasswordDirectly(userDTO.getId(), dto.getPassword()); diff --git a/main/manager-api/src/main/java/xiaozhi/modules/security/service/impl/CaptchaServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/security/service/impl/CaptchaServiceImpl.java index 121e3492..c6f8f490 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/security/service/impl/CaptchaServiceImpl.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/security/service/impl/CaptchaServiceImpl.java @@ -119,7 +119,7 @@ public class CaptchaServiceImpl implements CaptchaService { // 更新今日发送次数 if (todayCount == 0) { - redisUtils.increment(todayCountKey,RedisUtils.DEFAULT_EXPIRE); + redisUtils.increment(todayCountKey, RedisUtils.DEFAULT_EXPIRE); } else { redisUtils.increment(todayCountKey); } diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysUserServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysUserServiceImpl.java index 54048fe0..9f35836f 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysUserServiceImpl.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysUserServiceImpl.java @@ -133,6 +133,10 @@ public class SysUserServiceImpl extends BaseServiceImpl
新用户注册
-
忘记密码?
+
忘记密码?
-