一、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";
}