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","郵箱格式不正確!");
        }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章