forked from datawhale/whale-town-end
范围:src/core/utils/verification/README.md - 更新版本号从1.0.1到1.0.2 - 更新最后修改时间为2026-01-12 - 更新测试覆盖从38个测试用例到46个测试用例 - 确保文档信息与代码实现保持一致
3.7 KiB
3.7 KiB
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%通过率