忘记密码功能

一、Vue端代码实现:

1.在需要实现忘记密码的组件中,添加一个按钮,并绑定一个方法

<template>
  <div>
    <h3>忘记密码</h3>
    <form>
      <div>
        <label>邮箱:</label>
        <input type="email" v-model="email">
      </div>
      <button @click="resetPassword">重置密码</button>
    </form>
  </div>
</template>

<script>
export default {
  data () {
    return {
      email: ''
    }
  },
  methods: {
    resetPassword () {
      // 发送重置密码的邮件请求
    }
  }
}
</script>
 

2.在resetPassword方法中发送重置密码的邮件请求 

resetPassword () {
  this.$http.post('/resetPassword', {email: this.email}).then(response => {
    // 成功发送邮件
  }).catch(error => {
    // 发送邮件失败
  })
}
 

二、Spring Cloud端代码实现:

1.添加一个Controller,接收重置密码的请求

@RestController
public class ResetPasswordController {

    @Autowired
    private JavaMailSender javaMailSender;

    /**
     * 发送重置密码的邮件
     * @param email 用户邮箱
     * @return
     */
    @PostMapping("/resetPassword")
    public ResponseEntity<?> resetPassword(@RequestBody Map<String, String> requestMap) {
        String email = requestMap.get("email");
        // 根据邮箱查询用户信息
        User user = userRepository.findByEmail(email);
        if (user == null) {
            return ResponseEntity.badRequest().body("用户不存在");
        }

        // 生成一个UUID,作为重置密码的链接
        String uuid = UUID.randomUUID().toString();
        user.setResetPasswordUUID(uuid);
        userRepository.save(user);

        // 发送重置密码的邮件
        String resetPasswordUrl = "http://localhost:8080/resetPassword?uuid=" + uuid;
        String emailContent = "请点击以下链接重置密码: " + resetPasswordUrl;
        SimpleMailMessage message = new SimpleMailMessage();
        message.setTo(email);
        message.setSubject("重置密码");
        message.setText(emailContent);
        javaMailSender.send(message);

        return ResponseEntity.ok().body("邮件已发送,请查收");
    }
}
 

2.在重置密码页面中,根据UUID查询用户信息,并允许用户设置新密码

@GetMapping("/resetPassword")
public String resetPassword(@RequestParam("uuid") String uuid, Model model) {
    // 根据uuid查询用户信息
    User user = userRepository.findByResetPasswordUUID(uuid);
    if (user == null) {
        model.addAttribute("error", "链接已失效");
        return "reset-password";
    }

    model.addAttribute("email", user.getEmail());
    model.addAttribute("uuid", uuid);

    return "reset-password";
}

@PostMapping("/resetPassword")
public String resetPassword(@RequestParam("uuid") String uuid,
                             @RequestParam("password") String password,
                             @RequestParam("confirmPassword") String confirmPassword,
                             Model model) {
    // 根据uuid查询用户信息
    User user = userRepository.findByResetPasswordUUID(uuid);
    if (user == null) {
        model.addAttribute("error", "链接已失效");
        return "reset-password";
    }

    if (!password.equals(confirmPassword)) {
        model.addAttribute("error", "两次输入的密码不一致");
        return "reset-password";
    }

    // 更新用户密码
    user.setPassword(password);
    user.setResetPasswordUUID(null);
    userRepository.save(user);

    return "redirect:/login";
}
 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值