# Verification 验证码管理模块

Verification 是应用的核心验证码管理工具模块，提供完整的验证码生成、验证、存储和防刷机制。作为底层技术工具，可被多个业务模块复用，支持邮箱验证、密码重置、短信验证等多种场景。

## 验证码生成和管理

### generateCode()
生成指定类型的验证码，支持频率限制和防刷机制。

### verifyCode()
验证用户输入的验证码，包含尝试次数控制和TTL管理。

### deleteCode()
主动删除指定的验证码，用于清理或重置场景。

## 验证码状态查询

### codeExists()
检查指定验证码是否存在，用于状态判断。

### getCodeTTL()
获取验证码剩余有效时间，用于前端倒计时显示。

### getCodeStats()
获取验证码详细统计信息，包含尝试次数和创建时间。

## 防刷和管理功能

### clearCooldown()
清除验证码发送冷却时间，用于管理员操作或特殊场景。

### cleanupExpiredCodes()
清理过期验证码的定时任务方法，Redis自动过期机制的补充。

### debugCodeInfo()
调试方法，获取验证码完整信息，仅用于开发环境。

## 使用的项目内部依赖

### IRedisService (来自 ../../redis/redis.interface)
Redis服务接口，提供缓存存储、过期时间管理和键值操作能力。

### VerificationCodeType (本模块)
验证码类型枚举，定义邮箱验证、密码重置、短信验证三种类型。

### VerificationCodeInfo (本模块)
验证码信息接口，包含验证码、创建时间、尝试次数等完整数据结构。

## 核心特性

### 多类型验证码支持
- 邮箱验证码：用于用户注册和邮箱验证场景
- 密码重置验证码：用于密码找回和重置流程
- 短信验证码：用于手机号验证和双因子认证

### 完善的防刷机制
- 发送频率限制：60秒冷却时间，防止频繁发送
- 每小时限制：每小时最多发送5次，防止恶意刷取
- 验证尝试控制：最多3次验证机会，超出自动删除

### Redis缓存集成
- 自动过期机制：验证码5分钟自动过期
- TTL精确控制：保持原有过期时间，不重置倒计时
- 键命名规范：统一的Redis键命名和管理策略

### 完整的错误处理
- 异常分类处理：区分业务异常和技术异常
- 详细日志记录：记录生成、验证、错误等关键操作
- 资源自动清理：异常情况下自动清理无效数据

### 统计和调试支持
- 验证码统计：提供详细的使用统计和状态信息
- 调试接口：开发环境下的完整信息查看
- 性能监控：记录操作耗时和Redis连接状态

## 潜在风险

### Redis依赖风险
- Redis服务不可用时验证码功能完全失效
- 网络延迟可能影响验证码生成和验证性能
- 建议配置Redis高可用集群和连接池监控

### 验证码安全风险
- 6位数字验证码存在暴力破解可能性
- 调试接口可能泄露验证码内容
- 建议生产环境禁用debugCodeInfo方法并考虑增加验证码复杂度

### 频率限制绕过风险
- 使用不同标识符可能绕过频率限制
- 系统时间异常可能影响每小时限制计算
- 建议增加IP级别的频率限制和异常时间处理

### 内存和性能风险
- 大量验证码生成可能占用Redis内存
- 频繁的Redis操作可能影响系统性能
- 建议监控Redis内存使用和设置合理的过期策略

### 业务逻辑风险
- 验证码验证成功后立即删除，无法重复验证
- 冷却时间清除功能可能被滥用
- 建议根据业务需求调整验证策略和权限控制

## 版本信息

- **版本**: 1.0.2
- **作者**: moyin
- **创建时间**: 2025-12-17
- **最后修改**: 2026-01-12
- **测试覆盖**: 46个测试用例，100%通过率