diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/constant/RedisHttpConstant.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/constant/RedisHttpConstant.java index c846dcb..b560623 100644 --- a/ruoyi-xq/src/main/java/com/ruoyi/xq/constant/RedisHttpConstant.java +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/constant/RedisHttpConstant.java @@ -3,5 +3,8 @@ package com.ruoyi.xq.constant; public class RedisHttpConstant { public static final String REDIS_P = "xq-"; public static final String SYSTEM_CONFIG = REDIS_P + "system-config"; + + public static final String RESET_PASSWORD_CHECK_REDIS = REDIS_P + "resetPasswordCheck:%s"; } + diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/controller/app/AuthAppController.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/controller/app/AuthAppController.java index 6ef7cb8..44803b8 100644 --- a/ruoyi-xq/src/main/java/com/ruoyi/xq/controller/app/AuthAppController.java +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/controller/app/AuthAppController.java @@ -8,6 +8,7 @@ import com.ruoyi.common.enums.BusinessType; import com.ruoyi.xq.dto.app.auth.LoginUser; import com.ruoyi.xq.dto.app.auth.LoginVo; import com.ruoyi.xq.dto.app.auth.RegisterCode; +import com.ruoyi.xq.dto.app.auth.RegisterCodeCheck; import com.ruoyi.xq.dto.app.user.ResetPasswordReq; import com.ruoyi.xq.dto.common.sms.SmsCodeReq; import com.ruoyi.xq.enums.common.CodeEnum; @@ -91,13 +92,29 @@ public class AuthAppController { return R.ok("发送成功"); } - @PostMapping("/resetPassword") - @Operation(summary = "重置密码") - @Log(title = "重置密码", businessType = BusinessType.OTHER, isSaveDb = false) - public R resetPassword(@RequestBody ResetPasswordReq code){ - loginManager.resetPassword(code.getMobile(),code.getCode(),code.getPassword()); + + @PostMapping("/resetPassword/checkCode") + @Operation(summary = "重置密码-验证码校验") + @Log(title = "重置密码-验证码校验", businessType = BusinessType.OTHER, isSaveDb = false) + public R resetPasswordCheck(@RequestBody RegisterCodeCheck code){ + String check = loginManager.resetPasswordCheck(code.getMobile(), code.getCode()); + R ok = R.ok(); + ok.setData(check); return R.ok(); } + + @PostMapping("/resetPassword") + @Operation(summary = "重置密码") + @Log(title = "重置密码", businessType = BusinessType.OTHER, isSaveDb = false) + public R resetPassword(@RequestBody ResetPasswordReq code){ + loginManager.resetPassword(code.getMobile(),code.getPassword(),code.getToken()); + return R.ok(); + } + + + + + } diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/controller/app/OtherController.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/controller/app/OtherController.java index b843e01..49e9620 100644 --- a/ruoyi-xq/src/main/java/com/ruoyi/xq/controller/app/OtherController.java +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/controller/app/OtherController.java @@ -4,6 +4,7 @@ package com.ruoyi.xq.controller.app; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.helper.LoginHelper; import com.ruoyi.xq.dto.app.other.FeedbackReq; import com.ruoyi.xq.dto.app.report.ReportPushReq; import com.ruoyi.xq.service.FeedbackService; @@ -29,6 +30,7 @@ public class OtherController { @Operation(summary = "留言反馈") @Log(title = "留言反馈", businessType = BusinessType.OTHER, isSaveDb = false) public R feedback(@RequestBody FeedbackReq req){ + req.setUserId(LoginHelper.getUserId()); feedbackService.feedback(req); return R.ok(); } diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/dto/app/auth/RegisterCodeCheck.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/dto/app/auth/RegisterCodeCheck.java new file mode 100644 index 0000000..64556d7 --- /dev/null +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/dto/app/auth/RegisterCodeCheck.java @@ -0,0 +1,9 @@ +package com.ruoyi.xq.dto.app.auth; + +import lombok.Data; + +@Data +public class RegisterCodeCheck { + private String mobile; + private String code; +} diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/dto/app/user/ResetPasswordReq.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/dto/app/user/ResetPasswordReq.java index 2e59287..3c7cc5e 100644 --- a/ruoyi-xq/src/main/java/com/ruoyi/xq/dto/app/user/ResetPasswordReq.java +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/dto/app/user/ResetPasswordReq.java @@ -7,6 +7,6 @@ import lombok.Data; @Schema(description = "重置密码入参") public class ResetPasswordReq { private String mobile; - private String code; private String password; + private String token; } diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/manager/LoginManager.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/manager/LoginManager.java index c3ecc29..ad9078d 100644 --- a/ruoyi-xq/src/main/java/com/ruoyi/xq/manager/LoginManager.java +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/manager/LoginManager.java @@ -3,6 +3,7 @@ package com.ruoyi.xq.manager; import cn.dev33.satoken.exception.NotLoginException; import cn.dev33.satoken.secure.BCrypt; import cn.dev33.satoken.stp.StpUtil; +import cn.hutool.core.lang.UUID; import cn.hutool.core.util.IdUtil; import cn.hutool.extra.spring.SpringUtil; import com.alibaba.fastjson2.JSON; @@ -14,6 +15,7 @@ import com.ruoyi.common.helper.LoginHelper; import com.ruoyi.common.utils.MessageUtils; import com.ruoyi.common.utils.ServletUtils; import com.ruoyi.system.service.SysLoginService; +import com.ruoyi.xq.constant.RedisHttpConstant; import com.ruoyi.xq.domain.*; import com.ruoyi.xq.enums.common.AuditEnum; import com.ruoyi.xq.enums.common.CodeEnum; @@ -24,12 +26,14 @@ import com.ruoyi.xq.enums.userstatus.ShowAvatarEnum; import com.ruoyi.xq.executor.ExecutorConstant; import com.ruoyi.xq.lock.LockKey; import com.ruoyi.xq.service.*; +import com.ruoyi.xq.util.UuidUtils; import com.ruoyi.yunxin.client.ImUserClient; import com.ruoyi.yunxin.req.CreateUserReq; import com.ruoyi.yunxin.req.UpdateTokenReq; import com.ruoyi.yunxin.resp.YxCommonR; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.redisson.api.RBucket; import org.redisson.api.RLock; import org.redisson.api.RedissonClient; import org.springframework.beans.factory.annotation.Autowired; @@ -40,6 +44,7 @@ import javax.annotation.Resource; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.Collections; +import java.util.concurrent.TimeUnit; @Component @Slf4j @@ -242,7 +247,7 @@ public class LoginManager { return user; } - public void resetPassword(String mobile,String code,String password) { + public String resetPasswordCheck(String mobile,String code){ User user = userService.getByUsername(mobile); if(user == null){ throw new ServiceException("账户不存在"); @@ -251,6 +256,24 @@ public class LoginManager { if(!check){ throw new ServiceException("验证码错误"); } + String uuid = UuidUtils.uuid(); + String key = String.format(RedisHttpConstant.RESET_PASSWORD_CHECK_REDIS, uuid); + RBucket bucket = redissonClient.getBucket(key); + bucket.set(mobile,1, TimeUnit.HOURS); + return uuid; + } + + public void resetPassword(String mobile,String password,String token) { + User user = userService.getByUsername(mobile); + if(user == null){ + throw new ServiceException("账户不存在"); + } + String key = String.format(RedisHttpConstant.RESET_PASSWORD_CHECK_REDIS, token); + RBucket bucket = redissonClient.getBucket(key); + String value = bucket.get(); + if(StringUtils.isEmpty(value) || value.equals(mobile)){ + throw new ServiceException("验证码已过期"); + } userService.resetPassword(user.getId(),password); } } diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/util/UuidUtils.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/util/UuidUtils.java new file mode 100644 index 0000000..4582ef7 --- /dev/null +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/util/UuidUtils.java @@ -0,0 +1,9 @@ +package com.ruoyi.xq.util; + +import cn.hutool.core.lang.UUID; + +public class UuidUtils { + public static String uuid(){ + return UUID.fastUUID().toString().replace("-",""); + } +}