說明
郵箱驗證碼我們其實在手機驗證碼還沒有普及的時候很常見,筆者是做一個小需求 並沒有需要用到手機號去驗證,
其實不論是郵箱驗證還是手機驗證,他們的流程都是差不多的,只是手機號驗證需要辦理運營商套餐,而郵箱驗證
開啓郵箱的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","郵箱格式不正確!");
}