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

Next.js 的 API 路由文件(route.ts)的核心拆解

D:\trea\ployment\project24\Foresight-beta\apps\web\src\app\api\email-otp\request\route.ts

这是一个 Next.js 的 API 路由文件 ,用于处理 发送邮箱验证码 的请求。

它是后端逻辑的一部分,主要用于 绑定邮箱到钱包地址 时的身份验证。

1. 这个文件做什么?怎么做的?


- 做什么 :接收前端发来的“发送验证码”请求(包含邮箱和钱包地址),生成一个 6 位数字验证码,通过 SMTP 邮件服务发送给用户,并将验证码临时存储在服务器内存中以便后续验证。
- 怎么做的 :
1. 身份核验 :检查请求者的 Session(Cookie)是否与请求中的钱包地址一致,防止冒充。
2. 生成与存储 :生成随机 6 位数,存入全局内存对象( globalThis ,通过 getEmailOtpShared 获取),设置 15 分钟有效期。
3. 邮件发送 :使用 nodemailer 库连接配置好的 SMTP 服务器(如 Gmail, Outlook 等)发送邮件。
4. 开发环境后门 :如果是开发环境且邮件发送失败,它会直接把验证码返回给前端(方便调试)。

2. 核心功能


1. 安全性检查 : getSessionAddress(req) 确保发起请求的用户确实拥有该钱包地址的会话。
2. 防刷/限流 :检查 rec.lockUntil ,如果用户请求太频繁会被锁定(返回 429)。
3. 验证码生命周期管理 :生成、存储、过期时间(15分钟)。
4. 邮件发送服务 :封装 SMTP 发送逻辑。

3. 怎么找?(关联文件位置)


- 前端调用(Frontend) :

- 位置: apps/web/src/components/WalletModal.tsx (约 329 行)
- 代码特征: fetch('/api/email-otp/request', ...)
- 注意:项目中有两套验证码逻辑, LoginModal 用的是 Supabase,而这个 API 是自定义的,主要在 WalletModal 中使用。
- 共享工具/存储(Shared Utils) :

- 位置: apps/web/src/lib/serverUtils.ts
- 内容:定义了内存存储结构 ( getEmailOtpShared ) 和 Session 解析逻辑。
- 配置文件(Config) :

- 位置:项目根目录 .env 文件
- 关键词: SMTP_HOST , SMTP_PORT , SMTP_USER , SMTP_PASS 。

4. 梳理执行逻辑


输入 :POST 请求,Body JSON { email: "...", walletAddress: "..." }

流程图解 :

1. 初始化

- 获取全局共享存储 store 和日志 logs 。
- 解析 Body 获取 email 和 walletAddress 。
2. 前置校验 (Validation)

- Cookie 校验 :从 Cookie 解析 fs_session ,对比其地址与 Body 中的 walletAddress 是否一致。不一致 $\rightarrow$ 401 Unauthorized 。
- 格式校验 :检查邮箱格式。错误 $\rightarrow$ 400 Bad Request 。
3. 状态检查 (State Check)

- 从 store 获取该邮箱的记录。
- 锁定检查 :如果当前时间 < lockUntil ,说明被锁定。 $\rightarrow$ 429 Too Many Requests 。
4. 生成与更新 (Update)

- 生成 6 位随机码 genCode() 。
- 更新内存记录:设置 code , expiresAt (当前时间+15分钟),记录发送时间。
- 写入 store 。
5. 发送邮件 (IO Action)

- 记录日志 status: 'queued' 。
- 调用 sendMailSMTP 。
- 成功 :记录日志 status: 'sent' $\rightarrow$ 返回 200 OK { success: true } 。
- 失败 (Exception) :
- 记录错误日志。
- 开发环境特权 :如果 NODE_ENV !== 'production' ,返回 200 OK 但附带 codePreview (直接把验证码告诉你)。
- 生产环境 :返回 500 Internal Server Error 。

http://www.cnnetsun.cn/news/139993.html

相关文章:

  • vscode 连接失败
  • 【Linux系统】初探虚拟地址空间
  • vue和springboot框架开发的小程序 健身服务与轻食间平台系统健身减肥系统_xj840td0
  • vue和springboot框架开发的小程序儿童疫苗接种预约医疗提醒系统_5dq9226p
  • 【记录】Rust|Rust开发相关的7个VSCode插件的介绍和推荐指数(2025年)
  • C++小程序编写系列(2)
  • python-flask-django公司企业员工出差报销管理系统_04446nsn
  • Glyph2D 同一个图形根据点云的输入产生不同位置的输出
  • Lombok 注解:简化 Java 代码
  • 别让大数据“全表扫描”掏空你:数据分区策略与分区裁剪的实战心经
  • (转载)真正的缘分,“推背感”都跟强
  • Hadoop生态下的数据预处理:MapReduce实战案例解析
  • 2025 年 CTF 零基础入门全攻略!新手必藏!这种实战网络对抗机会千万别错过!
  • 新手也能轻松建站!VanBlog+cpolar让博客创作和分享更简单
  • vue导出excel文件
  • 基于STM32的自动售货机控制系统设计
  • 液压挖掘机回转能量回收系统设计与仿真
  • android 媒体之 MediaSession
  • 校园网络规划
  • 护眼灯已足够优秀,为何仍需眼调节训练灯?答案藏在近视防控里
  • Visual Studio中的多态
  • MindSpore硬核实战:彻底搞懂自动混合精度(AMP)与函数式训练
  • Java异常处理详解。零基础小白到精通,收藏这篇就够了
  • 基于深度学习YOLOv12的犬种识别检测系统(YOLOv12+YOLO数据集+UI界面+登录注册界面+Python项目源码+模型)
  • 基于深度学习YOLOv11的犬种识别检测系统(YOLOv11+YOLO数据集+UI界面+登录注册界面+Python项目源码+模型)
  • [插电式混合动力车辆][交替方向乘子法(ADMM)结合CVX]插电式混合动力车辆的能源管理:基于凸优化算法用于模型预测控制MPC研究附Matlab代码
  • 【别花冤枉钱】学生党专享!2025年把AI率90%降到10%的“低成本”组合拳(含免费/付费工具避坑指南)
  • 前端Vue制作日历插件FullCalendar,零基础入门到精通,收藏这篇就够了
  • 基于MPC算法的P2构型混合动力汽车能量管理优化策略
  • 德克萨斯大学奥斯汀分校突破:球形利奇量化提升AI图像生成质量