Files
whale-town-end/src/business/auth/README.md
moyin 267f1b2263 style(auth):优化auth模块代码规范和测试覆盖
范围:src/business/auth/
- 统一命名规范和注释格式
- 完善文件头部注释和修改记录
- 分离登录和注册业务逻辑到独立服务
- 添加缺失的测试文件(JWT守卫、控制器测试)
- 清理未使用的测试文件
- 优化代码结构和依赖关系
2026-01-12 18:04:33 +08:00

8.1 KiB
Raw Blame History

Auth 用户认证业务模块

Auth 是应用的核心用户认证业务模块提供完整的用户登录、注册、密码管理、JWT令牌认证和GitHub OAuth集成功能支持邮箱验证、验证码登录、安全防护和Zulip账号同步具备完善的业务流程控制、错误处理和安全审计能力。

用户认证功能

login()

处理用户登录请求,支持用户名/邮箱/手机号登录验证用户凭据并生成JWT令牌。

register()

处理用户注册请求支持邮箱验证自动创建Zulip账号并建立关联。

githubOAuth()

处理GitHub OAuth登录支持新用户自动注册和现有用户绑定。

verificationCodeLogin()

支持邮箱或手机号验证码登录,提供无密码登录方式。

密码管理功能

sendPasswordResetCode()

发送密码重置验证码到用户邮箱或手机号,支持测试模式和真实发送模式。

resetPassword()

使用验证码重置用户密码,包含密码强度验证和安全检查。

changePassword()

修改用户密码,验证旧密码并应用新密码强度规则。

邮箱验证功能

sendEmailVerification()

发送邮箱验证码,用于注册时的邮箱验证和账户安全验证。

verifyEmailCode()

验证邮箱验证码,确认邮箱所有权并更新用户验证状态。

resendEmailVerification()

重新发送邮箱验证码,处理验证码过期或丢失的情况。

sendLoginVerificationCode()

发送登录验证码,支持验证码登录功能。

调试和管理功能

debugVerificationCode()

获取验证码调试信息,用于开发环境的测试和调试。

HTTP API接口

POST /auth/login

用户登录接口,接受用户名/邮箱/手机号和密码返回JWT令牌和用户信息。

POST /auth/register

用户注册接口创建新用户账户并可选择性创建Zulip账号。

POST /auth/github

GitHub OAuth登录接口处理GitHub第三方登录和账户绑定。

POST /auth/forgot-password

发送密码重置验证码接口,支持邮箱和手机号找回密码。

POST /auth/reset-password

重置密码接口,使用验证码验证身份并设置新密码。

PUT /auth/change-password

修改密码接口,需要验证旧密码并设置新密码。

POST /auth/send-email-verification

发送邮箱验证码接口,用于邮箱验证流程。

POST /auth/verify-email

验证邮箱验证码接口,确认邮箱所有权。

POST /auth/resend-email-verification

重新发送邮箱验证码接口,处理验证码重发需求。

POST /auth/verification-code-login

验证码登录接口,支持无密码登录方式。

POST /auth/send-login-verification-code

发送登录验证码接口,为验证码登录提供验证码。

POST /auth/refresh-token

刷新JWT令牌接口使用刷新令牌获取新的访问令牌。

POST /auth/debug-verification-code

调试验证码接口,获取验证码状态和调试信息。

POST /auth/debug-clear-throttle

清除限流记录接口,仅用于开发环境调试。

认证和授权组件

JwtAuthGuard

JWT认证守卫验证请求中的Bearer令牌并提取用户信息到请求上下文。

CurrentUser

当前用户装饰器,从请求上下文中提取认证用户信息,支持获取完整用户对象或特定属性。

使用的项目内部依赖

LoginCoreService (来自 core/login_core/login_core.service)

登录核心服务提供用户认证、密码管理、JWT令牌生成验证等核心功能实现。

ZulipAccountService (来自 core/zulip_core/services/zulip_account.service)

Zulip账号服务处理Zulip账号的创建、管理和API Key安全存储。

ZulipAccountsService (来自 core/db/zulip_accounts/zulip_accounts.service)

Zulip账号数据服务管理游戏用户与Zulip账号的关联关系数据。

ApiKeySecurityService (来自 core/zulip_core/services/api_key_security.service)

API Key安全服务负责Zulip API Key的加密存储和安全管理。

Users (来自 core/db/users/users.entity)

用户实体类,定义用户数据结构和数据库映射关系。

UserStatus (来自 business/user_mgmt/user_status.enum)

用户状态枚举,定义用户的激活、禁用、待验证等状态值。

LoginDto, RegisterDto (本模块)

登录和注册数据传输对象,提供完整的数据验证规则和类型定义。

LoginResponseDto, RegisterResponseDto (本模块)

登录和注册响应数据传输对象定义API响应的数据结构和格式。

ThrottlePresets, TimeoutPresets (来自 core/security_core/decorators)

安全防护预设配置,提供限流和超时控制的标准配置。

核心特性

多种登录方式支持

  • 用户名/邮箱/手机号密码登录
  • GitHub OAuth第三方登录
  • 邮箱/手机号验证码登录
  • 自动识别登录标识符类型

JWT令牌管理

  • 访问令牌和刷新令牌双令牌机制
  • 令牌自动刷新和过期处理
  • 安全的令牌签名和验证
  • 用户信息载荷和权限控制

Zulip集成支持

  • 注册时自动创建Zulip账号
  • 游戏用户与Zulip账号关联管理
  • API Key安全存储和加密
  • 注册失败时的回滚机制

邮箱验证系统

  • 注册时邮箱验证流程
  • 密码重置邮箱验证
  • 验证码生成和过期管理
  • 测试模式和生产模式支持

安全防护机制

  • 请求频率限制和防暴力破解
  • 密码强度验证和安全存储
  • 用户状态检查和权限控制
  • 详细的安全审计日志

业务流程控制

  • 完整的错误处理和异常管理
  • 统一的响应格式和状态码
  • 业务规则验证和数据完整性
  • 操作日志和性能监控

潜在风险

Zulip账号创建失败风险

  • Zulip服务不可用时注册流程可能失败
  • 网络异常导致账号创建不完整
  • 建议实现重试机制和降级策略允许跳过Zulip账号创建

验证码发送依赖风险

  • 邮件服务配置错误导致验证码无法发送
  • 测试模式下验证码泄露到日志中
  • 建议完善邮件服务监控和测试模式安全控制

JWT令牌安全风险

  • 令牌泄露可能导致账户被盗用
  • 刷新令牌长期有效增加安全风险
  • 建议实现令牌黑名单机制和异常登录检测

并发操作风险

  • 同时注册相同用户名可能导致数据冲突
  • 高并发场景下验证码生成可能重复
  • 建议加强数据库唯一性约束和分布式锁机制

第三方服务依赖风险

  • GitHub OAuth服务不可用影响第三方登录
  • Zulip服务异常影响账号同步功能
  • 建议实现服务降级和故障转移机制

密码安全风险

  • 弱密码策略可能导致账户安全问题
  • 密码重置流程可能被恶意利用
  • 建议加强密码策略和增加二次验证机制

补充信息

版本信息

  • 模块版本1.0.2
  • 最后修改2026-01-07
  • 作者moyin
  • 创建时间2025-12-17

架构优化记录

  • 2026-01-07将JWT技术实现从Business层移至Core层符合分层架构原则
  • 2026-01-07完成代码规范优化统一注释格式和文件命名规范
  • 2026-01-07完善测试覆盖确保所有公共方法都有对应的单元测试

已知限制

  • 短信验证码功能尚未实现,目前仅支持邮箱验证码
  • Zulip账号创建失败时的重试机制有待完善
  • 多设备登录管理和会话控制功能待开发

改进建议

  • 实现短信验证码发送功能,完善多渠道验证
  • 增加社交登录支持微信、QQ等
  • 实现多因素认证MFA提升账户安全
  • 添加登录设备管理和异常登录检测
  • 完善Zulip集成的错误处理和重试机制