• 程序猿MT's avatar
    fix(auth): 修复 RefreshToken 使用过期 token 时的 nil pointer panic (#214) · 799b0106
    程序猿MT authored
    
    
    * fix(auth): 修复 RefreshToken 使用过期 token 时的 nil pointer panic
    
    问题分析:
    - RefreshToken 允许过期 token 继续流程(用于无感刷新)
    - 但 ValidateToken 在 token 过期时返回 nil claims
    - 导致后续访问 claims.UserID 时触发 panic
    
    修复方案:
    - 修改 ValidateToken,在检测到 ErrTokenExpired 时仍然返回 claims
    - jwt-go 在解析时即使遇到过期错误,token.Claims 仍会被填充
    - 这样 RefreshToken 可以正常获取用户信息并生成新 token
    
    新增测试:
    - TestAuthService_ValidateToken_ExpiredReturnsClaimsWithError
    - TestAuthService_RefreshToken_ExpiredTokenNoPanic
    Co-Authored-By: default avatarClaude Opus 4.5 <noreply@anthropic.com>
    
    * fix(auth): 修复邮件验证服务未配置时可绕过验证的安全漏洞
    
    当邮件验证开启但 emailService 未配置时,原逻辑允许用户绕过验证直接注册。
    现在会返回 ErrServiceUnavailable 拒绝注册,确保配置错误不会导致安全问题。
    
    - 在验证码检查前先检查 emailService 是否配置
    - 添加日志记录帮助发现配置问题
    - 新增单元测试覆盖该场景
    Co-Authored-By: default avatarClaude Opus 4.5 <noreply@anthropic.com>
    
    ---------
    Co-authored-by: default avataryangjianbo <yangjianbo@leagsoft.com>
    Co-authored-by: default avatarClaude Opus 4.5 <noreply@anthropic.com>
    799b0106
auth_service.go 13.3 KB