springboot用户注册、找回密码的邮箱验证码存入redis,三分钟有效

说明

邮箱验证码我们其实在手机验证码还没有普及的时候很常见,笔者是做一个小需求 并没有需要用到手机号去验证,
其实不论是邮箱验证还是手机验证,他们的流程都是差不多的,只是手机号验证需要办理运营商套餐,而邮箱验证
开启邮箱的pop3协议就可以了。
大致流程其实就这几步

  • 使用随机函数生成四位随机数存入redis中,邮箱为key,随机数为value,存活时长三分钟
  • 把随机数通过邮件发送给用户,这个过程最好是异步的,因为邮件的发送也要十来秒
  • 如果用户在三分钟内仍请求发送验证码,检测redis的key中有无该邮箱,如果没有则重新发送,有该邮箱key则不发送

1.首先配置redis,笔者使用RedisTemplate

redisTemplate其实是集成Jedis的redis操作模板,使用起来非常简单。
需要了解其在springboot工程中怎么配置,和其详细的用法,
可以查看笔者的上一篇博客,springboot配置stringRedisTemplate

2.用户注册和找回密码都是通过邮箱来实现的

springboot集成的框架简直多得不要不要的,邮件发送配置一个mail得starter即可,不过需要配置详细得发送人抄送等信息,
配置邮箱和mail的starter发送邮件,可以查看笔者的上一篇博客:SpringBoot使用JavaMailSender发送邮件

3.使用随机数生成四位随机数,当作验证码,并且设置失效时间为三分钟,

	String emailReg = "^([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$";
	Pattern pattern = Pattern.compile(emailReg);
	Matcher matcher = pattern.matcher(email);
	if(matcher.find()){
     		//验证邮箱格式是否正确
            String code = String.valueOf((int)((Math.random()*9+1)*1000));  //四位随机数验证码
            //向redis里存入数据和设置缓存时间
            redisTemplate.opsForValue().set(email, code, 60 * 3, TimeUnit.SECONDS);
            try {
     
                emailService.sendEmail("123456***@163.com",email,"验证码",code);
                data.put("code","success");
                data.put("msg","验证码发送成功,三分钟有效,请注意查收!");
            } catch (Exception e) {
     
                e.printStackTrace();
                data.put("code","error");
                data.put("msg","无法发送邮件,请稍后重试!");
            }
        }else {
     
            data.put("code","error");
            data.put("msg","邮箱格式不正确!");
        }

你可能感兴趣的:(redis,java,spring,boot,后端)