基于SpringBoot+Redis+Vue实现通过邮箱验证码找回密码的功能

前言

本文主要介绍缺陷跟踪系统项目中涉及的邮箱验证码找回密码功能的实现,效果图如下:

 

后端实现 

 1.数据库表设计

实现邮箱验证码功能只需设计一张用户表,用到邮箱、密码、加密盐,这几个字段。其他字段根据项目需要自己额外设计。

CREATE TABLE `tb_user`  (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `username` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户名',
  `realname` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '真实姓名',
  `password` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '密码',
  `secret_key` char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '密码密钥',
  `email` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '邮箱',
  `phone` char(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '联系方式',
  `gender` tinyint(1) NULL DEFAULT NULL COMMENT '性别,0男1女',
  `status` tinyint(1) NULL DEFAULT NULL COMMENT '账号状态,0注销1正常2冻结',
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `index_phone_unique`(`phone`) USING BTREE,
  UNIQUE INDEX `index_username_unique`(`username`) USING BTREE,
  UNIQUE INDEX `email_UNIQUE`(`email`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;

2.安装并启动Redis

 在该功能的实现中,Redis主要用来存储请求权限码和邮箱验证码。

下载并安装Redis后,输入启动命令 

redis-server.exe redis.windows.conf

如果出现以下界面,则成功启动,成功启动后窗口不能关闭。

3.添加依赖

<!--spring-boot启动依赖-->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter</artifactId>
</dependency>
<!--spring-boot web依赖-->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--mysql依赖-->
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<version>8.0.27</version>
</dependency>
<!--mybatis-plus启动依赖-->
<dependency>
	<groupId>com.baomidou</groupId>
	<artifactId>mybatis-plus-boot-starter</artifactId>
	<version>3.5.1</version>
</dependency>
<dependency>
	<groupId>com.baomidou</groupId>
	<artifactId>mybatis-plus-extension</artifactId>
	<version>3.5.1</version>
</dependency>
<!-- Redis依赖 -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- 邮箱依赖 -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-mail</artifactId>
</dependency>

4.编写配置文件

编写application配置文件,配置数据库相关信息。(此处不展示)

编写application-email.yml 配置文件,配置邮箱的相关信息。

spring:
  mail:
    host: smtp.qq.com
    u
### 关于 Spring BootVue验证码生成的实现 在构建基于 Spring BootVue 的应用时,为了增强系统的安全性,通常会加入验证码机制。这可以通过多种方式来完成,比如短信验证码[^2]、邮箱验证码[^4]以及图形或滑动模块验证码[^5]。 #### 后端部分 (Spring Boot) 对于后端而言,在 `pom.xml` 文件中添加必要的依赖项是第一步操作: ```xml <dependencies> <!-- 验证码发送服务所需的验证支持 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency> <!-- 如果涉及邮件发送,则需此依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> <!-- Redis缓存用于保存临时验证码 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> </dependencies> ``` 接着定义一个简单的 RESTful API 来处理验证码请求。这里以电子邮件为例展示如何创建这样的接口: ```java @RestController @RequestMapping("/api/v1/auth") public class EmailController { @Autowired private JavaMailSender emailSender; /** * 发送带有随机验证码的邮件给指定地址。 */ @PostMapping("/send-email-code") public ResponseEntity<String> sendEmailCode(@RequestParam String emailAddress) { try { // 生成六位数随机验证码 int code = new Random().nextInt(899999) + 100000; MimeMessage message = emailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(message, true); helper.setTo(emailAddress); helper.setSubject("您的验证码"); helper.setText(String.format("您好,\n\n这是您申请的服务验证码:%d", code)); emailSender.send(message); // 将验证码存储到Redis中以便后续校验 redisTemplate.opsForValue().set(emailAddress, Integer.toString(code), Duration.ofMinutes(5)); return ResponseEntity.ok("已成功发送验证码至 " + emailAddress); } catch (MessagingException e) { throw new RuntimeException(e.getMessage()); } } } ``` 上述代码片段实现了向用户提供电子邮箱地址的情况下发送包含唯一验证码的消息,并将其短暂地储存在 Redis 缓存里等待进一步确认。 #### 前端部分 (Vue.js) 前端方面则主要负责发起获取验证码的 HTTP 请求并将结果显示出来供用户查看。下面是一个简化版的例子说明怎样利用 Axios 库来进行网络通信: ```javascript // main.js 或者相应的入口文件 import axios from 'axios'; Vue.prototype.$http = axios; // 组件内调用方法 methods: { async requestVerificationCode() { const response = await this.$http.post('/api/v1/auth/send-email-code', null, { params: { emailAddress: this.email } }); alert(response.data); // 显示服务器返回的信息 console.log('Response:', response); }, }, ``` 此外还可以考虑集成一些 UI 框架如 ElementUI 提供更友好的交互体验,例如倒计时按钮防止频繁点击触发过多次请求等特性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值