Reids存储邮箱验证码

先集成Redis

邮箱验证

授权码是QQ邮箱推出的,用于登录第三方客户端的专用密码。
温馨提醒:为了你的帐户安全,更改QQ密码以及独立密码会触发授权码过期,需要重新获取新的授权码登录。

1.QQ邮箱开启 POP3/SMTP服务获取授权码

进入QQ邮箱,进入设置->账户

下拉 开启POP3/STMP服务
在这里插入图片描述
验证密保
在这里插入图片描述
获取授权码
在这里插入图片描述

2.在spingboot中配置

1. 添加依赖

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-mail</artifactId>
</dependency>

2. springboot集成邮件

spring:
  mail:
    host: smtp.qq.com
    username: 2811662803             # 发送方qq号
    password: xhwyoxrqvtohddff       # 授权码
    default-encoding: utf-8

3. 注入 JavaMailSender 对象

@Autowired
private JavaMailSender mailSender;

4. 随机生成6位数字验证码

	Random random = new Random();
	//生成0-1000000之内的随机数
	int randomNum = random.nextInt(1000000);
	//不足6位补0
	String randomCode = String.format("%06d", randomNum);

5. 发送邮件的逻辑代码

  SimpleMailMessage message = new SimpleMailMessage();
					message.setFrom("发送方QQ号@qq.com");
					message.setTo("接收方QQ号@qq.com");
					message.setSubject("主题:简单邮件验证");
					message.setText("测试邮件内容");
					mailSender.send(message);

实例测试

发送验证码

前端请求
//发送验证码
sendYzm(){
	var _this = this;//this是vue对象
	
	//正则验证邮箱是否合法
	var email=this.form.account;
	var reg = /^\w{5,}@[a-z0-9]{2,3}\.[a-z]+$|\,$/;
	if(!reg.test(email)){
		_this.$message({
			message: "邮箱的格式不正确!",
			type: 'warning'
		});
	}

	this.$http.post("/api/login/sendYzm", this.form).then(function(response) {
		if (response.data.code == 201) {
			_this.$message({
				message: response.data.msg,
				type: 'warning'
			});
			return;
		}
		if (response.data.code == 200) {
			_this.$message({
				message: response.data.msg,
				type: 'success'
			});
			return;
		}
	})
}
后端处理

Controller

@PostMapping(path = "/sendYzm")
public CommonResult sendYzm(@RequestBody MailCode mailCode) {//@RequestBody 接收请求体数据
   service.createVerificationCode(mailCode.getAccount());
   return new CommonResult(200, "发送成功",null);
}

Service

@Autowired
RedisTemplate redisTemplate;

@Autowired
JavaMailSender mailSender;

public void createVerificationCode(String account) {
	//创建Redis简单string的操作类
   ValueOperations operations = redisTemplate.opsForValue();
   
	//生成简单的6位验证码
   Random random = new Random();
   int randomNum = random.nextInt(1000000);
   String randomCode = String.format("%06d", randomNum);
	
	//发送邮件
   SimpleMailMessage message = new SimpleMailMessage();
   message.setFrom("2811662803@qq.com");
   message.setTo(account);
   message.setSubject("主题:简单邮件验证");
   message.setText("登录验证码:"+randomCode);
   mailSender.send(message);

   //设置键值对  k-v = 邮箱:验证码  的有效时间
   operations.set(account, randomCode,1, TimeUnit.MINUTES);
}

校验 验证码

前端请求
//校验验证码
checkYzm(){
	var _this = this;//this是vue对象
	this.$http.post("/api/login/checkYzm",this.form).then(function(response) {
		console.log(response.data);
		if (response.data.code == 201) {
			_this.$message({
				message: response.data.msg,
				type: "warning"
			});
			return;
		}else if (response.data.code == 200) {
			_this.$message({
				message: response.data.msg,
				type: "success"
			});
			return;
		}else{
			_this.$message({
				message: response.data.msg,
				type: "warning"
			});
			return;
		}
	})
}
后端处理

Controller

	@PostMapping(path = "/checkYzm")
    public CommonResult checkYzm(@RequestBody MailCode mailCode) {//@RequestBody 接收请求体数据
        CommonResult res = null;
        boolean bool = false;
        try {
            bool = service.checkCode(mailCode.getAccount(),mailCode.getCode());
            res = new CommonResult(200, "验证成功",bool);
        } catch (Exception e) {
            res = new CommonResult(500, "验证失败",bool);
        }
        return res;
    }

Service

	public boolean checkCode(String account, String yzm) {
        ValueOperations operations = redisTemplate.opsForValue();
        String compare = (String)operations.get(account);
        if(compare.equals(yzm)){
            return true;
        }
        return false;
    }

正则验证邮箱
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Redis实现短信验证码存储是一种常见的做法,以下是一个基本的实现方法: 1. 在用户请求获取验证码时,生成一个随机验证码,并将验证码保存到Redis中,同时设置过期时间为一定时间(如5分钟)。 2. 将验证码发送到用户手机,并将用户手机号与验证码的对应关系也保存到Redis中,同时设置过期时间为一定时间(如5分钟)。 3. 在用户提交验证码时,服务端从Redis中获取对应的验证码和手机号,进行比较,判断验证码是否正确。 4. 如果验证码正确,则将Redis中保存的验证码和手机号删除,同时允许用户进行下一步操作。 下面是一个示例代: ```python import redis # 连接Redis redis_client = redis.Redis(host='localhost', port=6379) # 生成随机验证码,保存到Redis def save_verify_code(phone_number, verify_code): redis_client.set(phone_number, verify_code) redis_client.expire(phone_number, 300) # 设置过期时间为5分钟 # 获取验证码,并从Redis中删除 def get_verify_code(phone_number): verify_code = redis_client.get(phone_number) redis_client.delete(phone_number) return verify_code.decode('utf-8') if verify_code else None # 检查验证码是否正确 def check_verify_code(phone_number, verify_code): return get_verify_code(phone_number) == verify_code ``` 这里使用Redis客户端库`redis`,首先连接到本地的Redis服务器(默认端口为6379),然后定义了三个函数:`save_verify_code`用于保存验证码,`get_verify_code`用于获取验证码并删除,`check_verify_code`用于检查验证码是否正确。这些函数都是基于Redis的字符串类型实现的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值