From 089e2b75903f044b441e988184ae0c2c1872bb62 Mon Sep 17 00:00:00 2001 From: luorijun Date: Mon, 21 Apr 2025 19:01:23 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E5=8F=96=E6=8E=A5=E5=8F=A3=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0IP=E4=B8=8E=E5=AE=9E=E5=90=8D=E9=AA=8C=E8=AF=81?= =?UTF-8?q?=EF=BC=9B=20SendSms=20=E6=B7=BB=E5=8A=A0=E8=B0=83=E8=AF=95?= =?UTF-8?q?=E6=A8=A1=E5=BC=8F=E9=AA=8C=E8=AF=81=E7=A0=81=E5=8F=91=E9=80=81?= =?UTF-8?q?=E8=B7=B3=E8=BF=87=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 10 ++-------- web/handlers/channel.go | 13 ++++++++++++- web/services/verifier.go | 40 +++++++++++++++++++++------------------- web/web.go | 1 + 4 files changed, 36 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index 6bd43bf..3b8d6d7 100644 --- a/README.md +++ b/README.md @@ -3,14 +3,14 @@ 核心流程: - [x] 注册与登录 - - [ ] 对接接口 + - [x] 对接接口 - [ ] 人机风险分级验证 - [ ] jwt 签发 - [x] 鉴权 - [x] 实名认证 - [x] 对接接口 - [x] 充值或购买 - - [ ] 对接接口 + - [x] 对接接口 - [ ] 提取记录 - [x] 提取 IP - [ ] 长效提取 @@ -24,14 +24,8 @@ 错误处理类型转换失败问题 -transition 服务,查询后立即完成,提供是否访问接口参数,统一主动与回调调用 - callback 结果直接由 api 端提供,不通过前端转发 -统一套餐创建逻辑 - -删除账单的状态字段,状态从关联表中计算获得 - 统一简化包导入别名 更新数据库填充 diff --git a/web/handlers/channel.go b/web/handlers/channel.go index 3e0e2ca..0ce5bce 100644 --- a/web/handlers/channel.go +++ b/web/handlers/channel.go @@ -28,6 +28,17 @@ func CreateChannel(c *fiber.Ctx) error { if err != nil { return err } + // 获取用户信息 + user, err := q.User. + Where(q.User.ID.Eq(authContext.Payload.Id)). + Take() + if err != nil { + return err + } + if user.IDToken == "" { + return fiber.NewError(fiber.StatusForbidden, "账号未实名") + } + count, err := q.Whitelist.Where( q.Whitelist.UserID.Eq(authContext.Payload.Id), q.Whitelist.Host.Eq(c.IP()), @@ -36,7 +47,7 @@ func CreateChannel(c *fiber.Ctx) error { return err } if count == 0 { - return fiber.NewError(fiber.StatusForbidden, fmt.Sprintf("forbidden %s", c.IP())) + return fiber.NewError(fiber.StatusForbidden, fmt.Sprintf("非白名单IP %s", c.IP())) } req := new(CreateChannelReq) diff --git a/web/services/verifier.go b/web/services/verifier.go index 79b2fee..fc1898c 100644 --- a/web/services/verifier.go +++ b/web/services/verifier.go @@ -78,25 +78,27 @@ func (s *verifierService) SendSms(ctx context.Context, phone string, purpose Ver code := rand.Intn(900000) + 100000 // 6-digit code between 100000-999999 // 发送短信验证码 - params, err := json.Marshal(map[string]string{ - "code": strconv.Itoa(code), - }) - if err != nil { - return err - } - response, err := g.Aliyun.Sms.SendSms(&client.SendSmsRequest{ - PhoneNumbers: &phone, - SignName: &env.AliyunSmsSignature, - TemplateCode: &env.AliyunSmsTemplateLogin, - TemplateParam: u.P(string(params)), - }) - if err != nil { - _ = rds.Client.Del(ctx, key, keyLock).Err() - return err - } - if response.Body.Code == nil || *response.Body.Code != "OK" { - _ = rds.Client.Del(ctx, key, keyLock).Err() - return VerifierServiceError("验证码发送失败") + if env.DebugExternalChange { + params, err := json.Marshal(map[string]string{ + "code": strconv.Itoa(code), + }) + if err != nil { + return err + } + response, err := g.Aliyun.Sms.SendSms(&client.SendSmsRequest{ + PhoneNumbers: &phone, + SignName: &env.AliyunSmsSignature, + TemplateCode: &env.AliyunSmsTemplateLogin, + TemplateParam: u.P(string(params)), + }) + if err != nil { + _ = rds.Client.Del(ctx, key, keyLock).Err() + return err + } + if response.Body.Code == nil || *response.Body.Code != "OK" { + _ = rds.Client.Del(ctx, key, keyLock).Err() + return VerifierServiceError("验证码发送失败") + } } // 设置验证码 diff --git a/web/web.go b/web/web.go index dda7939..d634ae4 100644 --- a/web/web.go +++ b/web/web.go @@ -46,6 +46,7 @@ func (s *Server) Run() error { // config s.fiber = fiber.New(fiber.Config{ + ProxyHeader: fiber.HeaderXForwardedFor, ErrorHandler: ErrorHandler, })