Browse Source

fix 修改忘记密码

Administrator 1 year ago
parent
commit
1e3983c1ac

+ 84 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/AppletController.java

@@ -0,0 +1,84 @@
+package com.ruoyi.web.controller.common;
+
+
+
+import com.ruoyi.common.annotation.RepeatSubmit;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.core.redis.RedisCache;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.SendSmsUtils;
+import com.ruoyi.system.service.ISysUserService;
+import org.apache.commons.lang3.ObjectUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.crypto.bcrypt.BCrypt;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.time.Duration;
+import java.util.concurrent.TimeUnit;
+
+import static com.ruoyi.common.constant.CommonConstants.ONE;
+
+/**小程序公共接口
+ * @Author: tjf
+ * @Date: 2023/5/25 11:46
+ * @Describe:
+ */
+@RestController
+@RequestMapping("/applet")
+public class AppletController extends BaseController {
+    @Autowired
+    private ISysUserService userService;
+    @Resource
+    private RedisCache redisCache;
+
+
+    /**
+     *忘记密码发送验证短信
+     */
+    @RepeatSubmit(interval = 1000,message = "请求过于频繁")
+    @GetMapping("/appForgetPW/{phone}")
+    public AjaxResult appForgetPW(@PathVariable String phone)
+    {
+        SysUser sysUser = userService.selectUserByPhonenumber(phone);
+        if (sysUser == null || sysUser.getUserId() == null){
+            return  AjaxResult.error("当前手机号系统内不存在,无法修改密码");
+        }
+        String code = SendSmsUtils.getCode(4);
+        SendSmsUtils.sendSms(phone,"SMS_219525380","{\"code\":\"" + code + "\"}");
+        String key = "SMS_CODE:"+phone;
+        redisCache.setCacheObject(key,code, 5,TimeUnit.MINUTES);
+        return  AjaxResult.success(code);
+    }
+    /**
+     *忘记密码校验验证码,修改密码
+     */
+    @RepeatSubmit
+    @GetMapping("/appCheck")
+    public AjaxResult appCheck(@RequestParam("code") String code, @RequestParam("phone") String phone, @RequestParam("password") String password)
+    {
+        String key = "SMS_CODE:"+phone;
+        Object cacheObject = redisCache.getCacheObject(key);
+        if (ObjectUtils.isNotEmpty(cacheObject)){
+            if (code.equals(String.valueOf(cacheObject))){
+                redisCache.deleteObject(key);
+                SysUser user = new SysUser();
+                user.setPassword(password);
+               //修改密码
+                if (ONE.equals(userService.checkStrongPwd(user))) {
+                    return AjaxResult.error("密码必须包含数字、大小写字母、特殊符号且大于8位");
+                }
+                user.setPhonenumber(phone);
+                user.setPlaintext(user.getPassword());
+                user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
+                user.setUpdateBy(getUsername());
+                return toAjax(userService.resetUserPwdByPhonenumber(user));
+            }
+        }
+        return  AjaxResult.error();
+    }
+
+}

+ 1 - 1
ruoyi-common/src/main/java/com/ruoyi/common/utils/SendSmsUtils.java

@@ -65,7 +65,7 @@ public class SendSmsUtils {
                 //手机号码
                 .setPhoneNumbers(phone)
                 //短信签名名称。中新云
-                .setSignName("中新云")
+                .setSignName("潜山市政协办公室")
                 //短信模板变量对应的实际值{"name": code}
                 .setTemplateParam(smsCode)
                 //短信模板CODE

+ 1 - 1
ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java

@@ -115,7 +115,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
                 // 静态资源,可匿名访问
                 .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
                 .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()
-                .antMatchers("/sendSms/**").permitAll()
+                .antMatchers("/sendSms/**","/applet/**").permitAll()
                 // 除上面外的所有请求全部需要鉴权认证
                 .anyRequest().authenticated()
                 .and()

+ 1 - 0
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java

@@ -67,6 +67,7 @@ public interface SysUserMapper
      * @return 结果
      */
     public int updateUser(SysUser user);
+    public int resetUserPwdByPhonenumber(SysUser user);
 
     /**
      * 修改用户头像

+ 1 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java

@@ -176,6 +176,7 @@ public interface ISysUserService
      * @return 结果
      */
     public int resetPwd(SysUser user);
+    public int resetUserPwdByPhonenumber(SysUser user);
 
     /**
      * 重置用户密码

+ 5 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java

@@ -398,6 +398,11 @@ public class SysUserServiceImpl implements ISysUserService
         return userMapper.updateUser(user);
     }
 
+    @Override
+    public int resetUserPwdByPhonenumber(SysUser user) {
+        return userMapper.resetUserPwdByPhonenumber(user);
+    }
+
     /**
      * 重置用户密码
      * 

+ 10 - 0
ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml

@@ -215,6 +215,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  		</set>
  		where user_id = #{userId}
 	</update>
+	<update id="resetUserPwdByPhonenumber" parameterType="SysUser">
+		update sys_user
+		<set>
+			<if test="password != null and password != ''">password = #{password},</if>
+			<if test="plaintext != null and plaintext != ''">plaintext = #{plaintext},</if>
+			<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
+			update_time = sysdate()
+		</set>
+		where phonenumber = #{phonenumber}
+	</update>
 	
 	<update id="updateUserStatus" parameterType="SysUser">
  		update sys_user set status = #{status} where user_id = #{userId}