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