发表于: 2020-08-31 23:48:29
1 1545
今天完成的事:
限制一个用户24小时之内只能生成5条验证码,根据失效时间来限制同一用户的发送频率。
/**
* 封装发送邮箱验证码的方法
* @param mail
* @param map
*/
public void sendMailCode(final String mail, Map<String,Object> map){
//判断今天是不是首次登录
if (redisService.get("count" + mail) == null) {
redisService.set("count" + mail, "5", 60 * 60 * 24);
//生成验证码,加到redis中.设置失效时间为2分钟。
String verify = getCode();
//发送*********
sendMail(mail,verify);
System.out.println("验证码是:" + verify);
redisService.set(mail, verify, 5);
map.put("msg", "验证码发送成功,还可以发送" + redisService.get("count"+mail) + "次");
} else {
//过期时间
long expire = redisService.getExpire(mail);
System.out.println("失效时间:---" + expire);
if (redisService.get(mail) == null) {
int count = Integer.parseInt((String) redisService.get("count" + mail));
//判断今天还有没有剩余发送次数和间隔时间
if (count > 0) {
//生成验证码,加到redis中.设置失效时间为2分钟。
String verify = getCode();
//发送*********
// sendMail(mail,verify);
System.out.println("验证码是:" + verify);
redisService.set(mail, verify, 5);
//可发送次数-1
redisService.decr("count" + mail, 1);
map.put("msg", "验证码发送成功,还可以发送" + count + "次");
} else {
logger.info(mail+ "====今天的发送验证码次数已使用完");
map.put("msg", "今天的发送次数已经用完");
}
} else {
map.put("msg", "请隔" + expire + "秒再发送");
}
}
}
明天的计划:
跑通注册和登录流程。
遇到的问题:
写这个功能的时候,逻辑比较乱,删改了很多次。
收获:
代码逻辑要理清楚再动手。
评论