From 55b8fe813d53f24a6ab881edfd34d627118af0ff Mon Sep 17 00:00:00 2001 From: shanshanzhong Date: Fri, 28 Nov 2025 00:47:38 -0800 Subject: [PATCH] =?UTF-8?q?fix(=E7=94=A8=E6=88=B7):=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E9=82=AE=E7=AE=B1=E9=AA=8C=E8=AF=81=E7=A0=81=E6=A0=A1=E9=AA=8C?= =?UTF-8?q?=E9=80=BB=E8=BE=91=EF=BC=8C=E6=94=AF=E6=8C=81=E5=A4=9A=E5=9C=BA?= =?UTF-8?q?=E6=99=AF=E9=AA=8C=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修改邮箱验证码校验逻辑,使其支持安全场景和注册场景的验证码校验。当任一场景验证通过时即视为验证成功,提升用户体验。 --- .../user/bindEmailWithVerificationLogic.go | 35 +++++++++++-------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/internal/logic/public/user/bindEmailWithVerificationLogic.go b/internal/logic/public/user/bindEmailWithVerificationLogic.go index f9a36aa..2072e6d 100644 --- a/internal/logic/public/user/bindEmailWithVerificationLogic.go +++ b/internal/logic/public/user/bindEmailWithVerificationLogic.go @@ -48,26 +48,33 @@ func (l *BindEmailWithVerificationLogic) BindEmailWithVerification(req *types.Bi return nil, errors.Wrapf(xerr.NewErrCode(xerr.InvalidAccess), "Invalid Access") } - // 校验邮箱验证码(安全场景) type payload struct { Code string `json:"code"` LastAt int64 `json:"lastAt"` } - cacheKey := fmt.Sprintf("%s:%s:%s", config.AuthCodeCacheKey, constant.Security, req.Email) - value, getErr := l.svcCtx.Redis.Get(l.ctx, cacheKey).Result() - if getErr != nil || value == "" { - l.Errorw("邮箱验证码校验失败", logger.Field("cacheKey", cacheKey), logger.Field("error", getErr)) - return nil, errors.Wrapf(xerr.NewErrCode(xerr.VerifyCodeError), "验证码错误") + var ( + scenes = []string{constant.Security.String(), constant.Register.String()} + verified = false + ) + for _, scene := range scenes { + cacheKey := fmt.Sprintf("%s:%s:%s", config.AuthCodeCacheKey, scene, req.Email) + value, getErr := l.svcCtx.Redis.Get(l.ctx, cacheKey).Result() + if getErr != nil || value == "" { + continue + } + var p payload + if err := json.Unmarshal([]byte(value), &p); err != nil { + continue + } + if p.Code == req.Code { + _ = l.svcCtx.Redis.Del(l.ctx, cacheKey).Err() + verified = true + break + } } - var p payload - if err := json.Unmarshal([]byte(value), &p); err != nil { - l.Errorw("邮箱验证码反序列化失败", logger.Field("error", err.Error()), logger.Field("value", value)) - return nil, errors.Wrapf(xerr.NewErrCode(xerr.VerifyCodeError), "验证码错误") + if !verified { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.VerifyCodeError), "code error") } - if p.Code != req.Code { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.VerifyCodeError), "验证码错误") - } - _ = l.svcCtx.Redis.Del(l.ctx, cacheKey).Err() // 获取当前用户的设备标识符 deviceIdentifier, err := l.getCurrentUserDeviceIdentifier(l.ctx, u.Id)