Nodejs + Redis 实现发送邮箱验证码及校验功能(流程相对完整)

前言

某天,突然想到怎么去做一个验证码校验功能呢?怎么校验正确与否呢?

回想起,在n多年前第一家公司实习时有一个手机发送验证码的需求,随后后端同学出了一个点子。在前端发送验证码请求之后,直接返回发出去的验证码,然后前端直接对比用户输入的验证码和后端返回的验证码是否一致即可。

当时我竟然还觉得挺合理!

正确的方式是怎样的呢?

以下是本人画的发送验证码及校验阶段流程图(简易版)

b4665d384fab4dee045bbcc83e405e1a.png

大致分为如下两个阶段:

发送验证码阶段

  1. 发送请求

    1. 用户通过 App 发送包含 email 参数的请求。

  2. 检查邮箱格式

    1. 如果邮箱格式不正确,拒绝请求。

  3. 生成验证码

    1. 如果邮箱格式正确,生成一个验证码。

  4. 存储验证码

    1. 将生成的验证码存储到 Redis,键为邮箱地址,值为验证码。

  5. 发送邮件

    1. 如果验证码存储成功,发送包含验证码的电子邮件。

    2. 如果邮件发送成功,返回发送成功信息;否则返回发送失败信息。

校验验证码阶段

  1. 发送请求

    1. 用户通过 App 发送包含 email验证码 参数的请求。

  2. 检查请求格式

    1. 如果请求格式不正确,拒绝请求。

  3. 获取验证码

    1. Redis 中获取存储的验证码。

  4. 验证验证码

    1. 如果验证码正确且未过期,返回成功信息和 Token

    2. 如果验证码不正确或已过期,返回验证失败信息。

接下来实践下

使用依赖及工具库

  • express(nodejs框架)

  • nodemailer(发送邮件)

  • redis(存储时效验证码)

  • dotenv (读取环境变量)

  • ejs(邮件模板)

非必需(项目启动)

  • pm2

  • nodemon

一、安装 Redis

Redis 安装方式就不详细介绍了,直接参考文档地址吧。

Docker 安装 Redis | 菜鸟教程[1]

二、提供编写两个接口

发送验证码

方法:POST

路径:/send-code

参数:

  • email (string): 接收验证码的邮箱地址

  • username (string): 用户名称(非必填)

app.post('/send-code', async (req, res) => {
    const { email, 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值