Commit 95254341a1169fb9af29ad5a3576cdef7721a23f
1 parent
5d4a7ffa
1. 会员用户的找回密码 API 的优化
Showing
11 changed files
with
57 additions
and
54 deletions
yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java
| @@ -11,7 +11,7 @@ public interface ErrorCodeConstants { | @@ -11,7 +11,7 @@ public interface ErrorCodeConstants { | ||
| 11 | 11 | ||
| 12 | // ========== 用户相关 1004001000============ | 12 | // ========== 用户相关 1004001000============ |
| 13 | ErrorCode USER_NOT_EXISTS = new ErrorCode(1004001000, "用户不存在"); | 13 | ErrorCode USER_NOT_EXISTS = new ErrorCode(1004001000, "用户不存在"); |
| 14 | - ErrorCode USER_PASSWORD_FAILED = new ErrorCode(1004001001, "密码校验失败"); | 14 | + ErrorCode USER_MOBILE_NOT_EXISTS = new ErrorCode(1004001001, "手机号未注册用户"); |
| 15 | ErrorCode USER_MOBILE_USED = new ErrorCode(1004001002, "修改手机失败,该手机号({})已经被使用"); | 15 | ErrorCode USER_MOBILE_USED = new ErrorCode(1004001002, "修改手机失败,该手机号({})已经被使用"); |
| 16 | 16 | ||
| 17 | // ========== AUTH 模块 1004003000 ========== | 17 | // ========== AUTH 模块 1004003000 ========== |
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.java
| @@ -4,7 +4,6 @@ import cn.hutool.core.util.StrUtil; | @@ -4,7 +4,6 @@ import cn.hutool.core.util.StrUtil; | ||
| 4 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; | 4 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| 5 | import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; | 5 | import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; |
| 6 | import cn.iocoder.yudao.framework.security.config.SecurityProperties; | 6 | import cn.iocoder.yudao.framework.security.config.SecurityProperties; |
| 7 | -import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated; | ||
| 8 | import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; | 7 | import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; |
| 9 | import cn.iocoder.yudao.module.member.controller.app.auth.vo.*; | 8 | import cn.iocoder.yudao.module.member.controller.app.auth.vo.*; |
| 10 | import cn.iocoder.yudao.module.member.service.auth.MemberAuthService; | 9 | import cn.iocoder.yudao.module.member.service.auth.MemberAuthService; |
| @@ -84,14 +83,6 @@ public class AppAuthController { | @@ -84,14 +83,6 @@ public class AppAuthController { | ||
| 84 | return success(true); | 83 | return success(true); |
| 85 | } | 84 | } |
| 86 | 85 | ||
| 87 | - @PostMapping("/reset-password") | ||
| 88 | - @Operation(summary = "重置密码", description = "用户忘记密码时使用") | ||
| 89 | - @PreAuthenticated | ||
| 90 | - public CommonResult<Boolean> resetPassword(@RequestBody @Valid AppAuthResetPasswordReqVO reqVO) { | ||
| 91 | - authService.resetPassword(reqVO); | ||
| 92 | - return success(true); | ||
| 93 | - } | ||
| 94 | - | ||
| 95 | // ========== 社交登录相关 ========== | 86 | // ========== 社交登录相关 ========== |
| 96 | 87 | ||
| 97 | @GetMapping("/social-auth-redirect") | 88 | @GetMapping("/social-auth-redirect") |
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppMemberUserController.java
| @@ -2,10 +2,7 @@ package cn.iocoder.yudao.module.member.controller.app.user; | @@ -2,10 +2,7 @@ package cn.iocoder.yudao.module.member.controller.app.user; | ||
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; | 3 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| 4 | import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated; | 4 | import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated; |
| 5 | -import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserInfoRespVO; | ||
| 6 | -import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserUpdatePasswordReqVO; | ||
| 7 | -import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserUpdateReqVO; | ||
| 8 | -import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserUpdateMobileReqVO; | 5 | +import cn.iocoder.yudao.module.member.controller.app.user.vo.*; |
| 9 | import cn.iocoder.yudao.module.member.convert.user.MemberUserConvert; | 6 | import cn.iocoder.yudao.module.member.convert.user.MemberUserConvert; |
| 10 | import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; | 7 | import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; |
| 11 | import cn.iocoder.yudao.module.member.service.user.MemberUserService; | 8 | import cn.iocoder.yudao.module.member.service.user.MemberUserService; |
| @@ -63,5 +60,12 @@ public class AppMemberUserController { | @@ -63,5 +60,12 @@ public class AppMemberUserController { | ||
| 63 | return success(true); | 60 | return success(true); |
| 64 | } | 61 | } |
| 65 | 62 | ||
| 63 | + @PutMapping("/reset-password") | ||
| 64 | + @Operation(summary = "重置密码", description = "用户忘记密码时使用") | ||
| 65 | + public CommonResult<Boolean> resetPassword(@RequestBody @Valid AppMemberUserResetPasswordReqVO reqVO) { | ||
| 66 | + userService.resetUserPassword(reqVO); | ||
| 67 | + return success(true); | ||
| 68 | + } | ||
| 69 | + | ||
| 66 | } | 70 | } |
| 67 | 71 |
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthResetPasswordReqVO.java renamed to yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppMemberUserResetPasswordReqVO.java
| 1 | -package cn.iocoder.yudao.module.member.controller.app.auth.vo; | 1 | +package cn.iocoder.yudao.module.member.controller.app.user.vo; |
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.framework.common.validation.Mobile; | 3 | import cn.iocoder.yudao.framework.common.validation.Mobile; |
| 4 | import io.swagger.v3.oas.annotations.media.Schema; | 4 | import io.swagger.v3.oas.annotations.media.Schema; |
| @@ -12,13 +12,12 @@ import javax.validation.constraints.NotBlank; | @@ -12,13 +12,12 @@ import javax.validation.constraints.NotBlank; | ||
| 12 | import javax.validation.constraints.NotEmpty; | 12 | import javax.validation.constraints.NotEmpty; |
| 13 | import javax.validation.constraints.Pattern; | 13 | import javax.validation.constraints.Pattern; |
| 14 | 14 | ||
| 15 | -// TODO 芋艿:code review 相关逻辑 | ||
| 16 | @Schema(description = "用户 APP - 重置密码 Request VO") | 15 | @Schema(description = "用户 APP - 重置密码 Request VO") |
| 17 | @Data | 16 | @Data |
| 18 | @NoArgsConstructor | 17 | @NoArgsConstructor |
| 19 | @AllArgsConstructor | 18 | @AllArgsConstructor |
| 20 | @Builder | 19 | @Builder |
| 21 | -public class AppAuthResetPasswordReqVO { | 20 | +public class AppMemberUserResetPasswordReqVO { |
| 22 | 21 | ||
| 23 | @Schema(description = "新密码", requiredMode = Schema.RequiredMode.REQUIRED, example = "buzhidao") | 22 | @Schema(description = "新密码", requiredMode = Schema.RequiredMode.REQUIRED, example = "buzhidao") |
| 24 | @NotEmpty(message = "新密码不能为空") | 23 | @NotEmpty(message = "新密码不能为空") |
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/convert/auth/AuthConvert.java
| @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.member.convert.auth; | @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.member.convert.auth; | ||
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.module.member.controller.app.auth.vo.*; | 3 | import cn.iocoder.yudao.module.member.controller.app.auth.vo.*; |
| 4 | import cn.iocoder.yudao.module.member.controller.app.social.vo.AppSocialUserUnbindReqVO; | 4 | import cn.iocoder.yudao.module.member.controller.app.social.vo.AppSocialUserUnbindReqVO; |
| 5 | +import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserResetPasswordReqVO; | ||
| 5 | import cn.iocoder.yudao.module.system.api.oauth2.dto.OAuth2AccessTokenRespDTO; | 6 | import cn.iocoder.yudao.module.system.api.oauth2.dto.OAuth2AccessTokenRespDTO; |
| 6 | import cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeSendReqDTO; | 7 | import cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeSendReqDTO; |
| 7 | import cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeUseReqDTO; | 8 | import cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeUseReqDTO; |
| @@ -21,7 +22,7 @@ public interface AuthConvert { | @@ -21,7 +22,7 @@ public interface AuthConvert { | ||
| 21 | SocialUserUnbindReqDTO convert(Long userId, Integer userType, AppSocialUserUnbindReqVO reqVO); | 22 | SocialUserUnbindReqDTO convert(Long userId, Integer userType, AppSocialUserUnbindReqVO reqVO); |
| 22 | 23 | ||
| 23 | SmsCodeSendReqDTO convert(AppAuthSmsSendReqVO reqVO); | 24 | SmsCodeSendReqDTO convert(AppAuthSmsSendReqVO reqVO); |
| 24 | - SmsCodeUseReqDTO convert(AppAuthResetPasswordReqVO reqVO, SmsSceneEnum scene, String usedIp); | 25 | + SmsCodeUseReqDTO convert(AppMemberUserResetPasswordReqVO reqVO, SmsSceneEnum scene, String usedIp); |
| 25 | SmsCodeUseReqDTO convert(AppAuthSmsLoginReqVO reqVO, Integer scene, String usedIp); | 26 | SmsCodeUseReqDTO convert(AppAuthSmsLoginReqVO reqVO, Integer scene, String usedIp); |
| 26 | 27 | ||
| 27 | AppAuthLoginRespVO convert(OAuth2AccessTokenRespDTO bean); | 28 | AppAuthLoginRespVO convert(OAuth2AccessTokenRespDTO bean); |
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthService.java
| @@ -62,12 +62,6 @@ public interface MemberAuthService { | @@ -62,12 +62,6 @@ public interface MemberAuthService { | ||
| 62 | String getSocialAuthorizeUrl(Integer type, String redirectUri); | 62 | String getSocialAuthorizeUrl(Integer type, String redirectUri); |
| 63 | 63 | ||
| 64 | /** | 64 | /** |
| 65 | - * 忘记密码 | ||
| 66 | - * @param userReqVO 用户请求实体类 | ||
| 67 | - */ | ||
| 68 | - void resetPassword(AppAuthResetPasswordReqVO userReqVO); | ||
| 69 | - | ||
| 70 | - /** | ||
| 71 | * 给用户发送短信验证码 | 65 | * 给用户发送短信验证码 |
| 72 | * | 66 | * |
| 73 | * @param userId 用户编号 | 67 | * @param userId 用户编号 |
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthServiceImpl.java
| @@ -27,7 +27,6 @@ import cn.iocoder.yudao.module.system.enums.oauth2.OAuth2ClientConstants; | @@ -27,7 +27,6 @@ import cn.iocoder.yudao.module.system.enums.oauth2.OAuth2ClientConstants; | ||
| 27 | import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum; | 27 | import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum; |
| 28 | import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; | 28 | import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; |
| 29 | import lombok.extern.slf4j.Slf4j; | 29 | import lombok.extern.slf4j.Slf4j; |
| 30 | -import org.springframework.security.crypto.password.PasswordEncoder; | ||
| 31 | import org.springframework.stereotype.Service; | 30 | import org.springframework.stereotype.Service; |
| 32 | import org.springframework.transaction.annotation.Transactional; | 31 | import org.springframework.transaction.annotation.Transactional; |
| 33 | 32 | ||
| @@ -62,8 +61,6 @@ public class MemberAuthServiceImpl implements MemberAuthService { | @@ -62,8 +61,6 @@ public class MemberAuthServiceImpl implements MemberAuthService { | ||
| 62 | private WxMaService wxMaService; | 61 | private WxMaService wxMaService; |
| 63 | 62 | ||
| 64 | @Resource | 63 | @Resource |
| 65 | - private PasswordEncoder passwordEncoder; | ||
| 66 | - @Resource | ||
| 67 | private MemberUserMapper userMapper; | 64 | private MemberUserMapper userMapper; |
| 68 | 65 | ||
| 69 | @Override | 66 | @Override |
| @@ -209,28 +206,21 @@ public class MemberAuthServiceImpl implements MemberAuthService { | @@ -209,28 +206,21 @@ public class MemberAuthServiceImpl implements MemberAuthService { | ||
| 209 | } | 206 | } |
| 210 | 207 | ||
| 211 | @Override | 208 | @Override |
| 212 | - public void resetPassword(AppAuthResetPasswordReqVO reqVO) { | ||
| 213 | - // 检验用户是否存在 | ||
| 214 | - MemberUserDO userDO = checkUserIfExists(reqVO.getMobile()); | ||
| 215 | - | ||
| 216 | - // 使用验证码 | ||
| 217 | - smsCodeApi.useSmsCode(AuthConvert.INSTANCE.convert(reqVO, SmsSceneEnum.MEMBER_FORGET_PASSWORD, | ||
| 218 | - getClientIP())); | ||
| 219 | - | ||
| 220 | - // 更新密码 | ||
| 221 | - userMapper.updateById(MemberUserDO.builder().id(userDO.getId()) | ||
| 222 | - .password(passwordEncoder.encode(reqVO.getPassword())).build()); | ||
| 223 | - } | ||
| 224 | - | ||
| 225 | - @Override | ||
| 226 | public void sendSmsCode(Long userId, AppAuthSmsSendReqVO reqVO) { | 209 | public void sendSmsCode(Long userId, AppAuthSmsSendReqVO reqVO) { |
| 227 | - // 如果是修改手机场景,需要校验新手机号是否已经注册,说明不能使用该手机了 | 210 | + // 情况 1:如果是修改手机场景,需要校验新手机号是否已经注册,说明不能使用该手机了 |
| 228 | if (Objects.equals(reqVO.getScene(), SmsSceneEnum.MEMBER_UPDATE_MOBILE.getScene())) { | 211 | if (Objects.equals(reqVO.getScene(), SmsSceneEnum.MEMBER_UPDATE_MOBILE.getScene())) { |
| 229 | - MemberUserDO user = userMapper.selectByMobile(reqVO.getMobile()); | 212 | + MemberUserDO user = userService.getUserByMobile(reqVO.getMobile()); |
| 230 | if (user != null && !Objects.equals(user.getId(), userId)) { | 213 | if (user != null && !Objects.equals(user.getId(), userId)) { |
| 231 | throw exception(AUTH_MOBILE_USED); | 214 | throw exception(AUTH_MOBILE_USED); |
| 232 | } | 215 | } |
| 233 | } | 216 | } |
| 217 | + // 情况 2:如果是重置密码场景,需要校验手机号是存在的 | ||
| 218 | + if (Objects.equals(reqVO.getScene(), SmsSceneEnum.MEMBER_RESET_PASSWORD.getScene())) { | ||
| 219 | + MemberUserDO user= userService.getUserByMobile(reqVO.getMobile()); | ||
| 220 | + if (user == null) { | ||
| 221 | + throw exception(USER_MOBILE_NOT_EXISTS); | ||
| 222 | + } | ||
| 223 | + } | ||
| 234 | 224 | ||
| 235 | // 执行发送 | 225 | // 执行发送 |
| 236 | smsCodeApi.sendSmsCode(AuthConvert.INSTANCE.convert(reqVO).setCreateIp(getClientIP())); | 226 | smsCodeApi.sendSmsCode(AuthConvert.INSTANCE.convert(reqVO).setCreateIp(getClientIP())); |
| @@ -248,14 +238,6 @@ public class MemberAuthServiceImpl implements MemberAuthService { | @@ -248,14 +238,6 @@ public class MemberAuthServiceImpl implements MemberAuthService { | ||
| 248 | return AuthConvert.INSTANCE.convert(accessTokenDO); | 238 | return AuthConvert.INSTANCE.convert(accessTokenDO); |
| 249 | } | 239 | } |
| 250 | 240 | ||
| 251 | - public MemberUserDO checkUserIfExists(String mobile) { | ||
| 252 | - MemberUserDO user = userMapper.selectByMobile(mobile); | ||
| 253 | - if (user == null) { | ||
| 254 | - throw exception(USER_NOT_EXISTS); | ||
| 255 | - } | ||
| 256 | - return user; | ||
| 257 | - } | ||
| 258 | - | ||
| 259 | private void createLogoutLog(Long userId) { | 241 | private void createLogoutLog(Long userId) { |
| 260 | LoginLogCreateReqDTO reqDTO = new LoginLogCreateReqDTO(); | 242 | LoginLogCreateReqDTO reqDTO = new LoginLogCreateReqDTO(); |
| 261 | reqDTO.setLogType(LoginLogTypeEnum.LOGOUT_SELF.getType()); | 243 | reqDTO.setLogType(LoginLogTypeEnum.LOGOUT_SELF.getType()); |
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserService.java
| @@ -4,6 +4,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; | @@ -4,6 +4,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||
| 4 | import cn.iocoder.yudao.framework.common.validation.Mobile; | 4 | import cn.iocoder.yudao.framework.common.validation.Mobile; |
| 5 | import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserPageReqVO; | 5 | import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserPageReqVO; |
| 6 | import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserUpdateReqVO; | 6 | import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserUpdateReqVO; |
| 7 | +import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserResetPasswordReqVO; | ||
| 7 | import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserUpdatePasswordReqVO; | 8 | import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserUpdatePasswordReqVO; |
| 8 | import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserUpdateReqVO; | 9 | import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserUpdateReqVO; |
| 9 | import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserUpdateMobileReqVO; | 10 | import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserUpdateMobileReqVO; |
| @@ -95,6 +96,13 @@ public interface MemberUserService { | @@ -95,6 +96,13 @@ public interface MemberUserService { | ||
| 95 | void updateUserPassword(Long userId, AppMemberUserUpdatePasswordReqVO reqVO); | 96 | void updateUserPassword(Long userId, AppMemberUserUpdatePasswordReqVO reqVO); |
| 96 | 97 | ||
| 97 | /** | 98 | /** |
| 99 | + * 【会员】忘记密码 | ||
| 100 | + * | ||
| 101 | + * @param reqVO 请求信息 | ||
| 102 | + */ | ||
| 103 | + void resetUserPassword(AppMemberUserResetPasswordReqVO reqVO); | ||
| 104 | + | ||
| 105 | + /** | ||
| 98 | * 判断密码是否匹配 | 106 | * 判断密码是否匹配 |
| 99 | * | 107 | * |
| 100 | * @param rawPassword 未加密的密码 | 108 | * @param rawPassword 未加密的密码 |
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java
| @@ -7,9 +7,11 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; | @@ -7,9 +7,11 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||
| 7 | import cn.iocoder.yudao.module.infra.api.file.FileApi; | 7 | import cn.iocoder.yudao.module.infra.api.file.FileApi; |
| 8 | import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserPageReqVO; | 8 | import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserPageReqVO; |
| 9 | import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserUpdateReqVO; | 9 | import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserUpdateReqVO; |
| 10 | +import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserResetPasswordReqVO; | ||
| 10 | import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserUpdatePasswordReqVO; | 11 | import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserUpdatePasswordReqVO; |
| 11 | import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserUpdateReqVO; | 12 | import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserUpdateReqVO; |
| 12 | import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserUpdateMobileReqVO; | 13 | import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserUpdateMobileReqVO; |
| 14 | +import cn.iocoder.yudao.module.member.convert.auth.AuthConvert; | ||
| 13 | import cn.iocoder.yudao.module.member.convert.user.MemberUserConvert; | 15 | import cn.iocoder.yudao.module.member.convert.user.MemberUserConvert; |
| 14 | import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; | 16 | import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; |
| 15 | import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper; | 17 | import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper; |
| @@ -142,6 +144,28 @@ public class MemberUserServiceImpl implements MemberUserService { | @@ -142,6 +144,28 @@ public class MemberUserServiceImpl implements MemberUserService { | ||
| 142 | } | 144 | } |
| 143 | 145 | ||
| 144 | @Override | 146 | @Override |
| 147 | + public void resetUserPassword(AppMemberUserResetPasswordReqVO reqVO) { | ||
| 148 | + // 检验用户是否存在 | ||
| 149 | + MemberUserDO user = validateUserExists(reqVO.getMobile()); | ||
| 150 | + | ||
| 151 | + // 使用验证码 | ||
| 152 | + smsCodeApi.useSmsCode(AuthConvert.INSTANCE.convert(reqVO, SmsSceneEnum.MEMBER_RESET_PASSWORD, | ||
| 153 | + getClientIP())); | ||
| 154 | + | ||
| 155 | + // 更新密码 | ||
| 156 | + memberUserMapper.updateById(MemberUserDO.builder().id(user.getId()) | ||
| 157 | + .password(passwordEncoder.encode(reqVO.getPassword())).build()); | ||
| 158 | + } | ||
| 159 | + | ||
| 160 | + private MemberUserDO validateUserExists(String mobile) { | ||
| 161 | + MemberUserDO user = memberUserMapper.selectByMobile(mobile); | ||
| 162 | + if (user == null) { | ||
| 163 | + throw exception(USER_MOBILE_NOT_EXISTS); | ||
| 164 | + } | ||
| 165 | + return user; | ||
| 166 | + } | ||
| 167 | + | ||
| 168 | + @Override | ||
| 145 | public boolean isPasswordMatch(String rawPassword, String encodedPassword) { | 169 | public boolean isPasswordMatch(String rawPassword, String encodedPassword) { |
| 146 | return passwordEncoder.matches(rawPassword, encodedPassword); | 170 | return passwordEncoder.matches(rawPassword, encodedPassword); |
| 147 | } | 171 | } |
yudao-module-member/yudao-module-member-biz/src/test/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthServiceTest.java
| @@ -5,7 +5,7 @@ import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; | @@ -5,7 +5,7 @@ import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; | ||
| 5 | import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; | 5 | import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; |
| 6 | import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration; | 6 | import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration; |
| 7 | import cn.iocoder.yudao.framework.test.core.ut.BaseDbAndRedisUnitTest; | 7 | import cn.iocoder.yudao.framework.test.core.ut.BaseDbAndRedisUnitTest; |
| 8 | -import cn.iocoder.yudao.module.member.controller.app.auth.vo.AppAuthResetPasswordReqVO; | 8 | +import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserResetPasswordReqVO; |
| 9 | import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserUpdatePasswordReqVO; | 9 | import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserUpdatePasswordReqVO; |
| 10 | import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; | 10 | import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; |
| 11 | import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper; | 11 | import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper; |
| @@ -101,7 +101,7 @@ public class MemberAuthServiceTest extends BaseDbAndRedisUnitTest { | @@ -101,7 +101,7 @@ public class MemberAuthServiceTest extends BaseDbAndRedisUnitTest { | ||
| 101 | when(passwordEncoder.encode(password)).thenReturn(password); | 101 | when(passwordEncoder.encode(password)).thenReturn(password); |
| 102 | 102 | ||
| 103 | // 更新用户密码 | 103 | // 更新用户密码 |
| 104 | - AppAuthResetPasswordReqVO reqVO = new AppAuthResetPasswordReqVO(); | 104 | + AppMemberUserResetPasswordReqVO reqVO = new AppMemberUserResetPasswordReqVO(); |
| 105 | reqVO.setMobile(userDO.getMobile()); | 105 | reqVO.setMobile(userDO.getMobile()); |
| 106 | reqVO.setPassword(password); | 106 | reqVO.setPassword(password); |
| 107 | reqVO.setCode(code); | 107 | reqVO.setCode(code); |
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/sms/SmsSceneEnum.java
| @@ -19,7 +19,7 @@ public enum SmsSceneEnum implements IntArrayValuable { | @@ -19,7 +19,7 @@ public enum SmsSceneEnum implements IntArrayValuable { | ||
| 19 | MEMBER_LOGIN(1, "user-sms-login", "会员用户 - 手机号登陆"), | 19 | MEMBER_LOGIN(1, "user-sms-login", "会员用户 - 手机号登陆"), |
| 20 | MEMBER_UPDATE_MOBILE(2, "user-update-mobile", "会员用户 - 修改手机"), | 20 | MEMBER_UPDATE_MOBILE(2, "user-update-mobile", "会员用户 - 修改手机"), |
| 21 | MEMBER_UPDATE_PASSWORD(3, "user-update-mobile", "会员用户 - 修改密码"), | 21 | MEMBER_UPDATE_PASSWORD(3, "user-update-mobile", "会员用户 - 修改密码"), |
| 22 | - MEMBER_FORGET_PASSWORD(4, "user-forget-password", "会员用户 - 忘记密码"), | 22 | + MEMBER_RESET_PASSWORD(4, "user-reset-password", "会员用户 - 忘记密码"), |
| 23 | 23 | ||
| 24 | ADMIN_MEMBER_LOGIN(21, "admin-sms-login", "后台用户 - 手机号登录"); | 24 | ADMIN_MEMBER_LOGIN(21, "admin-sms-login", "后台用户 - 手机号登录"); |
| 25 | 25 |