实现如何利用 Kafka 延时删除 用户邮箱的验证码(如何发送邮箱+源码) - 第一期
技术框架:
前端:vue3+axios
后端:springboot3+ jakarta.mail
简单流程:
1. 用户输入邮箱,点击 获取验证码
<div v-if="activeMethod === 'email'" class="form-group">
<input
v-model="email.number"
type="text"
placeholder="请输入邮箱"
class="form-input"
>
<div class="code-input-group">
<input
v-model="email.code"
type="text"
placeholder="验证码"
class="form-input code-input"
>
<button class="send-code-btn" @click="sendCode">
{{ countdown > 0 ? `${countdown}s后重发` : '获取验证码' }}
</button>
</div>
</div>
const sendCode = () => {
// 请求后端 邮箱接口
axios.get('http://127.0.0.1:8848/emailv3', {
params: {
to: email.value.number
}
}).then(res => {
console.log(res)
alert("验证码已发送,请留意邮箱")
// 存储uuid
localStorage.setItem('uuid',res.data)
})
}
2. 后端接收前端发出的邮箱,先判断数据库中是否已经存在邮箱了,如果没有则随机生成a-zA-Z0-9的6位验证码并保存到数据库,然后通过邮件功能去发送用户的邮箱,并返回 uuid,并且存储到本地缓存中,作为临时邮箱验证码的依据
// 查询邮箱是否唯一
public boolean SelectMail(String mail) {
QueryWrapper<Users> queryWrapper = new QueryWrapper<>();
System.out.println("查询邮箱是否唯一"+mail);
queryWrapper.eq("user_mail", mail);
Users users = userMapper.selectOne(queryWrapper);
if (users != null) {
return true;
}
return false;
}
private static final String CODE = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
private static final int CODE_LENGTH = 6;
// 创建随机 6 位 数字 字母 的验证码
public String generateCode() {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < CODE_LENGTH; i++) {
int index = (int) (Math.random() * CODE.length());
sb.append(CODE.charAt(index));
}
return sb.toString();
}
// 生成一个UUID作为验证码的唯一辅助标识符
public String generateUUID() {
return UUID.randomUUID().toString().replace("-", "").substring(0, 10);
}
// 发送邮箱时进行保存
public void saveQrCode( String code, String uuid) {
QrCodes qrCode = new QrCodes();
qrCode.setQrCode(null);
qrCode.setQrCode(code);
qrCode.setQrUuid(uuid);
int insert = qrCodeMapper.insert(qrCode);
if (insert > 0) {
System.out.println("存储成功");
System.out.println("验证码:" + code + ",UUID:" + uuid);
}
}
3. 用户去邮箱那边拿验证码
粘贴到登录界面的验证码框内
4. 点击登录的时候,就会获取 邮箱框,验证码,UUID,
axios.post('http://127.0.0.1:8848/loginbymail', {
email: email.value.number,
uuid: localStorage.getItem('uuid'),
code: email.value.code
})
5. 后端创建一个 模型请求类 来获取
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class EmailLogin {
private String email;
private String uuid;
private String code;
}
6.邮箱登录
// 用户利用邮箱登录
@PostMapping("loginbymail")
public String UserLoginByMail(@RequestBody EmailLogin emailLogin){
System.out.println("用户传来的数据"+emailLogin);
// 判断uuid是否正确
String uuid = emailLogin.getUuid();
String email = emailLogin.getEmail();
String code = emailLogin.getCode();
String temp = "验证失败,UUID或验证码错误";
if (!emailService.getQrCodeByUuidAndCode(code, uuid)){
// 验证失败,UUID或验证码错误
return temp;
}
// 验证成功,注册用户
return userService.EmailRegisterUser(email)?"注册成功":temp;
}
7.校验 uuid + code
// 查询用户的 UUID+code
public boolean getQrCodeByUuidAndCode(String code, String uuid) {
QueryWrapper<QrCodes> qrCodeQueryWrapper = new QueryWrapper<>();
qrCodeQueryWrapper.eq("qr_uuid", uuid);
qrCodeQueryWrapper.eq("qr_code", code);
QrCodes qrCode = qrCodeMapper.selectOne(qrCodeQueryWrapper);
System.out.println("查询结果:" + qrCode.toString());
if (qrCode != null) {
return true;
}
return false;
}
8.登录成功!
下篇介绍,这时候如何接入 kafka实现延时删除邮箱验证码+uuid
* Thanks you *
如果觉得文章内容不错,随手帮忙点个赞、在看、转发一下,如果想第一时间收到推送,也可以给我个星标⭐~谢谢你看我的文章。
*往期推荐 *
Docker小白入门教程一篇领你入门(CRUD全命令+无废话版+问题集)-第三期
Docker小白入门教程一篇领你入门(CRUD全命令+无废话版+问题集)
想要高效处理,那不妨看看 Python的 异步 Asyncio 保证效率翻多倍
银河麒麟 | ubuntu 安装国产达梦DM8数据库(安装+外网通+IDEA连接)
网络设备日志存储到指定的Kiwi-log服务器(图解+软件)
银河麒麟 | ubuntu 安装运用 docker 容器,实现容器化部署项目
银河麒麟 | ubuntu 安装zabbix监控设备信息(亲测包对)
国产操作系统-银河麒麟本地化部署Ollama国产开源的AI大模型Qwen3
Ubuntu | 安装 Zabbix 一篇就够了
Swagger | 手把手带你写自动生成接口文档的爽感(零基础亲测实用)
SpringBoot整合Openfeign接入Kimi Ai!!超简单,居然没多少行代码??(附加兜底教程)
SpringBoot接入Kimi实践记录轻松上手
Linux | 零基础Ubuntu搭建JDK
Maven | 站在初学者的角度配置与项目创建(新手必学会)
Spring Ai | 极简代码从零带你一起走进AI项目(中英)
Open Ai | 从零搭建属于你的Ai项目(中英结合)
MongoDB | 零基础学习与Springboot整合ODM实现增删改查(附源码)
Openfeign | 只传递城市代码,即可获取该地域实时的天气数据(免费的天气API)
Redis | 缓存技术对后端的重要性,你知道多少?
Mongodb | 基于Springboot开发综合社交网络应用的项目案例(中英)
感谢阅读 | 更多内容尽在公棕号 WMCode | CSDN@小Mie不吃饭