当前位置: 首页 > news >正文

实现如何利用 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@ToStringpublic 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不吃饭

http://www.lryc.cn/news/579773.html

相关文章:

  • Web攻防-文件上传黑白名单MIMEJS前端执行权限编码解析OSS存储分域名应用场景
  • 二叉树题解——二叉树的层序遍历【LeetCode】队列实现
  • 热血三国建筑攻略表格
  • SciPy 安装使用教程
  • 【agent实战】用Agentic方案构建智能附件处理聊天服务
  • Element UI 完整使用实战示例
  • 智能设备远程管理:基于OpenAI风格API的自动化实践
  • 每日算法刷题Day41 6.28:leetcode前缀和2道题,用时1h20min(要加快)
  • Java中Stream流的使用
  • 低代码实战训练营教学大纲 (10天)
  • Linux内核驱动(前言、工程环境搭建及linux系统移植)(7.3)
  • 计算机科学导论(10)什么是BIOS
  • 设计模式-观察者模式、命令模式
  • STM32要学到什么程度才算合格?
  • HTTP详细介绍
  • 【BurpSuite 2025最新版插件开发】基础篇7:数据的持久化存储
  • serviceWorker缓存资源
  • P1073 [NOIP 2009 提高组] 最优贸易
  • 【数字后端】- 衡量design的congestion情况
  • 【HarmonyOS】应用开发拖拽功能详解
  • MySQL 8.0 OCP 1Z0-908 题目解析(17)
  • 高边驱动 低边驱动
  • IOC容器讲解以及Spring依赖注入最佳实践全解析
  • 【数据结构】哈希——闭散列/开散列模拟实现(C++)
  • 魔术方法__call__
  • Java的SpringAI+Deepseek大模型实战之会话记忆
  • Python入门Day2
  • 网络编程学习路线图
  • Windows 10 2016 长期服务版
  • 7.3实验部分