From 2b1fd696010c0a9400d07136261d5378580ff49d Mon Sep 17 00:00:00 2001 From: chy <2463300564@qq.com> Date: Tue, 24 Jun 2025 16:41:58 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E7=9F=AD=E4=BF=A1=E9=99=90?= =?UTF-8?q?=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/consts/redis.go | 5 +++-- internal/logic/user/user.go | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/internal/consts/redis.go b/internal/consts/redis.go index e64bd55..16973b9 100644 --- a/internal/consts/redis.go +++ b/internal/consts/redis.go @@ -2,8 +2,9 @@ package consts // 用户 const ( - UserBindPhoneKey = "user:bindPhone:%s" - UserCodeExpire = 5 * 60 + UserBindPhoneKey = "user:bindPhone:%s" + UserBindPhoneLimitKey = "user:bindPhoneLimit:%s" + UserCodeExpire = 5 * 60 ) const ( diff --git a/internal/logic/user/user.go b/internal/logic/user/user.go index e23ab34..3a487b6 100644 --- a/internal/logic/user/user.go +++ b/internal/logic/user/user.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "github.com/gogf/gf/v2/frame/g" + "github.com/gogf/gf/v2/os/glog" "github.com/gogf/gf/v2/os/gtime" "github.com/gogf/gf/v2/util/grand" "server/internal/consts" @@ -164,6 +165,23 @@ func (s *sUser) Info(ctx context.Context, in *model.UserInfoIn) (out *model.User } func (s *sUser) Code(ctx context.Context, in *model.GetPhoneCodeIn) (out *model.GetPhoneCodeOut, err error) { + + // 限制 1min只能调用一次 + get, err := g.Redis().Get(ctx, fmt.Sprintf(consts.UserBindPhoneLimitKey, in.Phone)) + if err != nil { + glog.Errorf(ctx, "Redis 获取绑定手机限制失败: %v", err) + return nil, ecode.Fail.Sub("Redis 获取绑定手机限制失败") + } + if get.IsEmpty() { + err = g.Redis().SetEX(ctx, fmt.Sprintf(consts.UserBindPhoneLimitKey, in.Phone), "1", consts.UserCodeExpire) + if err != nil { + glog.Errorf(ctx, "Redis 设置绑定手机限制失败: %v", err) + return nil, ecode.Fail.Sub("Redis 设置绑定手机限制失败") + } + } else { + return nil, ecode.InvalidOperation.Sub("请勿重复请求绑定手机验证码") + } + code := grand.Digits(6) // 存入 redis