找回密码的困扰
自己做了一个博客网站,有登录注册功能,但是没有找回密码功能,思考了许久,发现可以通过第三方来实现,第一想到的就是通过短信验证码,但是资金问题,一条0.1元,属是有点贵(多了就贵了),然后想到了用微信扫码,但是微信也收费,无奈之下用邮箱吧,感觉邮箱还不错,只需要开启STMP协议就行了,开启之后,会有一个密码,那个密码保存好,后面会用到。
开始创建
首先创建一个springboot项目,然后引入mail依赖,简单配置即可。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
配置yaml,密码为自己生成的
准备工作做好之后,下面来写一下获取验证码的方法,把获取到的验证码存到session中方便后续判断。
@Resource
private JavaMailSender mailSender;
@Value("${spring.mail.username}")
private String username;
public String getCode(String email, HttpSession session) {
int code = (int) (Math.random() * 1000000);
String codeString = String.valueOf(code);
if (codeString.length() != 6) {
code = code + 100000;
}
SimpleMailMessage message = new SimpleMailMessage();
// 设置邮箱标题
message.setSubject("验证码");
// 设置邮箱内容
message.setText("您好!\n验证码为:"+ code);
// 发送者邮箱
message.setFrom(username);
message.setTo(email);
mailSender.send(message);
session.setAttribute("email", email);
session.setAttribute("code", code + "");
return "success";
}
获取到验证码之后,可以进行注册了
public BaseResult register(String email, String password, String code, HttpSession session) {
User user = new User();
String myEmail = (String) session.getAttribute("email");
String myCode = (String) session.getAttribute("code");
if (!email.equals(myEmail) || !code.equals(myCode)) {
return BaseResult.error();
}
user.setUsername(UUID.randomUUID().toString());
user.setEmail(email);
user.setPassword(password);
user.setSalt("abc");
user.setHeadUrl("url");
userMapper.addUser(user);
return BaseResult.ok();
}
注册完之后,就可以进行登录了。
public BaseResult Login(String email, String password) {
User user = userMapper.selectUserByEmail(email);
if (user.getPassword().equals(password)) {
return BaseResult.ok();
}
return BaseResult.error();
}