From 71e392c1f9e73a5c8fbc3b1141495afbb0307ef0 Mon Sep 17 00:00:00 2001
From: 疯狂的狮子li <15040126243@163.com>
Date: 星期五, 06 五月 2022 18:08:16 +0800
Subject: [PATCH] add 增加 获取短信验证码接口

---
 ruoyi-system/src/main/java/com/ruoyi/system/service/SysLoginService.java         |   12 ++++++++----
 ruoyi-system/pom.xml                                                             |    6 ++++++
 ruoyi-ui/src/api/login.js                                                        |   12 ++++++++++++
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CaptchaController.java |   24 ++++++++++++++++++++++++
 ruoyi-admin/src/main/resources/application.yml                                   |    1 +
 5 files changed, 51 insertions(+), 4 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CaptchaController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CaptchaController.java
index 2b9917f..95acba2 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CaptchaController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CaptchaController.java
@@ -4,6 +4,7 @@
 import cn.hutool.captcha.generator.CodeGenerator;
 import cn.hutool.core.convert.Convert;
 import cn.hutool.core.util.IdUtil;
+import cn.hutool.core.util.RandomUtil;
 import com.ruoyi.common.constant.Constants;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.enums.CaptchaType;
@@ -12,13 +13,17 @@
 import com.ruoyi.common.utils.reflect.ReflectUtils;
 import com.ruoyi.common.utils.spring.SpringUtils;
 import com.ruoyi.framework.config.properties.CaptchaProperties;
+import com.ruoyi.sms.config.properties.SmsProperties;
 import com.ruoyi.system.service.ISysConfigService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
 import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.validation.constraints.NotBlank;
 import java.time.Duration;
 import java.util.HashMap;
 import java.util.Map;
@@ -28,15 +33,34 @@
  *
  * @author Lion Li
  */
+@Validated
 @Api(value = "楠岃瘉鐮佹搷浣滃鐞�", tags = {"楠岃瘉鐮佺鐞�"})
 @RequiredArgsConstructor
 @RestController
 public class CaptchaController {
 
     private final CaptchaProperties captchaProperties;
+    private final SmsProperties smsProperties;
     private final ISysConfigService configService;
 
     /**
+     * 鐭俊楠岃瘉鐮�
+     */
+    @ApiOperation("鐭俊楠岃瘉鐮�")
+    @GetMapping("/captchaSms")
+    public R<Void> smsCaptcha(@ApiParam("鐢ㄦ埛鎵嬫満鍙�")
+                              @NotBlank(message = "{user.phonenumber.not.blank}")
+                              String phonenumber) {
+        if (smsProperties.getEnabled()) {
+            R.fail("褰撳墠绯荤粺娌℃湁寮�鍚煭淇″姛鑳斤紒");
+        }
+        String key = Constants.CAPTCHA_CODE_KEY + phonenumber;
+        String code = RandomUtil.randomNumbers(4);
+        RedisUtils.setCacheObject(key, code, Duration.ofMinutes(Constants.CAPTCHA_EXPIRATION));
+        return R.ok();
+    }
+
+    /**
      * 鐢熸垚楠岃瘉鐮�
      */
     @ApiOperation("鐢熸垚楠岃瘉鐮�")
diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml
index c692fc2..56076b3 100644
--- a/ruoyi-admin/src/main/resources/application.yml
+++ b/ruoyi-admin/src/main/resources/application.yml
@@ -124,6 +124,7 @@
     - /logout
     - /register
     - /captchaImage
+    - /captchaSms
     # 闈欐�佽祫婧�
     - /*.html
     - /**/*.html
diff --git a/ruoyi-system/pom.xml b/ruoyi-system/pom.xml
index 57ec06c..5e243aa 100644
--- a/ruoyi-system/pom.xml
+++ b/ruoyi-system/pom.xml
@@ -29,6 +29,12 @@
             <artifactId>ruoyi-oss</artifactId>
         </dependency>
 
+        <!-- SMS鍔熻兘妯″潡 -->
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>ruoyi-sms</artifactId>
+        </dependency>
+
     </dependencies>
 
 </project>
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/SysLoginService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/SysLoginService.java
index f60419f..7b42952 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/SysLoginService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/SysLoginService.java
@@ -79,7 +79,7 @@
         SysUser user = loadUserByPhonenumber(phonenumber);
 
         HttpServletRequest request = ServletUtils.getRequest();
-        checkLogin(LoginType.SMS, user.getUserName(), () -> !validateSmsCode(phonenumber, smsCode));
+        checkLogin(LoginType.SMS, user.getUserName(), () -> !validateSmsCode(phonenumber, smsCode, request));
         // 姝ゅ鍙牴鎹櫥褰曠敤鎴风殑鏁版嵁涓嶅悓 鑷鍒涘缓 loginUser
         LoginUser loginUser = buildLoginUser(user);
         // 鐢熸垚token
@@ -121,9 +121,13 @@
     /**
      * 鏍¢獙鐭俊楠岃瘉鐮�
      */
-    private boolean validateSmsCode(String phonenumber, String smsCode) {
-        // todo 姝ゅ浣跨敤鎵嬫満鍙锋煡璇edis楠岃瘉鐮佷笌鍙傛暟楠岃瘉鐮佹槸鍚︿竴鑷� 鐢ㄦ埛鑷瀹炵幇
-        return true;
+    private boolean validateSmsCode(String phonenumber, String smsCode, HttpServletRequest request) {
+        String code = RedisUtils.getCacheObject(Constants.CAPTCHA_CODE_KEY + phonenumber);
+        if (StringUtils.isNotBlank(code)) {
+            asyncService.recordLogininfor(phonenumber, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire"), request);
+            throw new CaptchaExpireException();
+        }
+        return code.equals(smsCode);
     }
 
     /**
diff --git a/ruoyi-ui/src/api/login.js b/ruoyi-ui/src/api/login.js
index 0327e6f..3c5bcfe 100644
--- a/ruoyi-ui/src/api/login.js
+++ b/ruoyi-ui/src/api/login.js
@@ -57,3 +57,15 @@
     timeout: 20000
   })
 }
+
+// 鐭俊楠岃瘉鐮�
+export function getCodeSms() {
+  return request({
+    url: '/captchaSms',
+    headers: {
+      isToken: false
+    },
+    method: 'get',
+    timeout: 20000
+  })
+}

--
Gitblit v1.9.3