java后台 重置手机密码(邮箱点击确认)

    @Log("重置密码-输入手机号,点击下一步")
    @PostMapping("/forget/step1")
    @ResponseBody
    R forget1(String phoneNumber) {
// 用户名是不是已经被注册
        UserDO userDO = userService.getByUserName(phoneNumber); // 查询该用户名信息
        System.out.println("forget1 :" + userDO.getEmail());
        if (userDO != null) {
            String xingxing = "************************************************************";
            String zi01 = userDO.getEmail().split("\\@")[0];
            String zi02 = userDO.getEmail().split("\\@")[1];
            int changdu = zi01.length() - 4;
            String xin = zi01.substring(0, 4) + xingxing.substring(0, changdu) + "@" + zi02;

            String zhi = UUID.randomUUID().toString() + ":" + phoneNumber;

            System.out.println("forget2 :" + zhi);


            //将邮箱确认信息添加到redis中,0表示未确认,1表示邮箱已经确认过
            if (redisTemplate.opsForHash().hasKey("fogetPwd:mailConform", phoneNumber)) {
                System.out.println("forget3 :" + zhi);
                redisTemplate.opsForHash().delete("fogetPwd:mailConform", phoneNumber);
                redisTemplate.opsForHash().put("fogetPwd:mailConform", phoneNumber, zhi);  //未确认是0,已确认是1
            } else {
                System.out.println("forget4 :" + zhi);
                redisTemplate.opsForHash().put("fogetPwd:mailConform", phoneNumber, zhi);
            }


            String hreff = "http://ip:端口/forget/mailConform/" + zhi;

            //往邮箱发送一个字符串
            sendHTMLMail(userDO, hreff);

            return R.ok("已经向" + xin + "发送了邮件,请前往确认!");
        } else {
            return R.error("没有该手机号的注册信息!");
        }


    }

    void sendHTMLMail(UserDO userDO, String content) {
        MimeMessage message;
        System.out.println("mail send 01 ");
        try {
            message = javaMailSender.createMimeMessage();
            MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(message, true, "utf-8");
            mimeMessageHelper.setFrom("365556466@qq.com", "大步学习");
            mimeMessageHelper.setTo(userDO.getEmail());
            mimeMessageHelper.setSubject("密码重置确认");
            StringBuilder sb = new StringBuilder();
            sb.append("<h1>密码重置确认</h1>")
                    .append("<a href='" + content + "'>" + "点击这里" + "</a>");
            mimeMessageHelper.setText(sb.toString(), true);
            javaMailSender.send(message);
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("邮件发送失败 ");
            logger.error("邮件发送失败", e.getMessage());
        }
    }


    @Log("点击邮箱中的链接,会调用此接口")
    @RequestMapping("/forget/mailConform/{content}")
    @ResponseBody
    String mailConform(@PathVariable("content") String content) {
        System.out.println("forget/mailConform  :" + content);
        String phoneNumber = content.split("\\:")[1];
        if (redisTemplate.opsForHash().hasKey("fogetPwd:mailConform", phoneNumber)) {
            if (redisTemplate.opsForHash().get("fogetPwd:mailConform", phoneNumber).equals(content)) {
                redisTemplate.opsForHash().delete("fogetPwd:mailConform", phoneNumber);
                redisTemplate.opsForHash().put("fogetPwd:mailConform", phoneNumber, "1");  //未确认是0,已确认是1
            }
        }
        return "请回到密码重置页,继续操作";
    }


    @Log("重置密码-点击邮箱确认继续")
    @PostMapping("/forget/step2")
    @ResponseBody
    R forget2(String phoneNumber) {
        //将邮箱确认信息添加到redis中,0表示未确认,1表示邮箱已经确认过
        if (redisTemplate.opsForHash().hasKey("fogetPwd:mailConform", phoneNumber)) {
            String zhi = redisTemplate.opsForHash().get("fogetPwd:mailConform", phoneNumber).toString();
            if (zhi.equals("1")) {
                return R.ok();
            } else {
                return R.error("邮箱未确认!!!");
            }
        }
        return R.error("邮箱未确认!!!");
    }


    @Log("重置密码-点击邮箱确认继续")
    @RequestMapping("/forget/step3")
    @ResponseBody
    R forget3(String phoneNumber, String pwd) {
        System.out.println(phoneNumber + " :" + pwd);
        try {
            System.out.println("update 0");
            UserDO userDO = userService.getByUserName(phoneNumber); // 查询该用户名信息
            userDO.setPassword(MD5Utils.encrypt(phoneNumber, pwd));  //登录密码
            System.out.println("update 1");
            userService.update(userDO);
            System.out.println("update 2");
            return R.ok();
        } catch (Exception e) {
            e.printStackTrace();
            return R.error();
        }
    }

FR:徐海涛(hunk Xu)
QQ技术交流群:386476712

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值