From e6ab8330996092a769a48c0c97010f0b0ae3140a Mon Sep 17 00:00:00 2001 From: liangzai <2440983361@qq.com> Date: Thu, 12 Feb 2026 13:43:03 +0800 Subject: [PATCH] f --- .../domains/user/services/sms_code_service.go | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/internal/domains/user/services/sms_code_service.go b/internal/domains/user/services/sms_code_service.go index d838539..c5b13fe 100644 --- a/internal/domains/user/services/sms_code_service.go +++ b/internal/domains/user/services/sms_code_service.go @@ -50,6 +50,24 @@ func (s *SMSCodeService) SendCode(ctx context.Context, phone string, scene entit return err } + // 0.1. 检查同一手机号同一场景的1分钟间隔限制 + canResend, err := s.CanResendCode(ctx, phone, scene) + if err != nil { + s.logger.Warn("检查验证码重发限制失败", + zap.String("phone", phone), + zap.String("scene", string(scene)), + zap.Error(err)) + // 检查失败时继续执行,避免影响正常流程 + } else if !canResend { + // 获取最近的验证码记录以计算剩余等待时间 + recentCode, err := s.repo.GetValidByPhoneAndScene(ctx, phone, scene) + if err == nil { + remainingTime := s.config.RateLimit.MinInterval - time.Since(recentCode.CreatedAt) + return fmt.Errorf("短信发送过于频繁,请等待 %d 秒后重试", int(remainingTime.Seconds())+1) + } + return fmt.Errorf("短信发送过于频繁,请稍后再试") + } + // 1. 生成验证码 code := s.smsClient.GenerateCode(s.config.CodeLength)