From 42dd06b5f83968155817b942200676cf521bb7fe Mon Sep 17 00:00:00 2001
From: “mitao” <“2763622819@qq.com”>
Date: 星期二, 07 四月 2026 17:17:03 +0800
Subject: [PATCH] feat:app帐号密码登录、忘记密码

---
 tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/auth/service/AppSmsCodeService.java |   27 ++++++++++++++++++++++-----
 1 files changed, 22 insertions(+), 5 deletions(-)

diff --git a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/auth/service/AppSmsCodeService.java b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/auth/service/AppSmsCodeService.java
index 9b83971..97f338c 100644
--- a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/auth/service/AppSmsCodeService.java
+++ b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/auth/service/AppSmsCodeService.java
@@ -16,6 +16,7 @@
 
     private static final String LOGIN_CODE_CACHE_PREFIX = "app:sms:login:";
     private static final String REGISTER_CODE_CACHE_PREFIX = "app:sms:register:";
+    private static final String PASSWORD_RESET_CODE_CACHE_PREFIX = "app:sms:password-reset:";
 
     private final StringRedisTemplate stringRedisTemplate;
     private final AppSmsSender appSmsSender;
@@ -36,14 +37,21 @@
      * 生成并发送登录验证码,同时写入缓存。
      */
     public AppSmsCodeSendResponse createLoginCode(String phone) {
-        return createCode(phone, LOGIN_CODE_CACHE_PREFIX, true);
+        return createCode(phone, LOGIN_CODE_CACHE_PREFIX, "login");
     }
 
     /**
      * 生成并发送注册验证码,同时写入缓存。
      */
     public AppSmsCodeSendResponse createRegisterCode(String phone) {
-        return createCode(phone, REGISTER_CODE_CACHE_PREFIX, false);
+        return createCode(phone, REGISTER_CODE_CACHE_PREFIX, "register");
+    }
+
+    /**
+     * 生成并发送忘记密码验证码,同时写入缓存。
+     */
+    public AppSmsCodeSendResponse createPasswordResetCode(String phone) {
+        return createCode(phone, PASSWORD_RESET_CODE_CACHE_PREFIX, "password-reset");
     }
 
     /**
@@ -61,9 +69,16 @@
     }
 
     /**
+     * 校验忘记密码验证码,成功后销毁缓存中的一次性验证码。
+     */
+    public void validatePasswordResetCode(String phone, String code) {
+        validateCode(phone, code, PASSWORD_RESET_CODE_CACHE_PREFIX);
+    }
+
+    /**
      * 统一生成指定场景的验证码并写入缓存。
      */
-    private AppSmsCodeSendResponse createCode(String phone, String cachePrefix, boolean loginScene) {
+    private AppSmsCodeSendResponse createCode(String phone, String cachePrefix, String scene) {
         String code = generateCode();
         stringRedisTemplate.opsForValue().set(
                 buildCacheKey(cachePrefix, phone),
@@ -71,10 +86,12 @@
                 appSmsAuthProperties.getExpireSeconds(),
                 TimeUnit.SECONDS
         );
-        if (loginScene) {
+        if ("login".equals(scene)) {
             appSmsSender.sendLoginCode(phone, code);
-        } else {
+        } else if ("register".equals(scene)) {
             appSmsSender.sendRegisterCode(phone, code);
+        } else {
+            appSmsSender.sendPasswordResetCode(phone, code);
         }
         return new AppSmsCodeSendResponse(appSmsAuthProperties.getExpireSeconds());
     }

--
Gitblit v1.7.1