修复:调整游客取号限流策略
问题:移动网络共享出口 IP 会造成游客取号被误限流。 实现:移除公开取号 IP 限制,改用项目总量与手机号 HMAC 限流,并支持 Retry-After 倒计时。
This commit is contained in:
@@ -271,6 +271,20 @@ func (s *Server) createTicketForActor(w http.ResponseWriter, r *http.Request, ac
|
||||
auditAction = "PUBLIC_TICKET_CREATED"
|
||||
duplicateMessage = "该手机号已有活动号码,请确认后继续"
|
||||
}
|
||||
phoneDigest := s.cipher.Digest(phone)
|
||||
if publicView && (s.publicTicketProjectLimiter != nil || s.publicTicketPhoneLimiter != nil) {
|
||||
if stored, code, found, err := loadIdempotent(s.db.WithContext(r.Context()), projectID, actorID, scope, key, hash, s.now()); err != nil {
|
||||
writeError(w, err)
|
||||
return
|
||||
} else if found {
|
||||
writeRawJSON(w, code, stored)
|
||||
return
|
||||
}
|
||||
if allowed, retry := s.allowPublicTicket(projectID, phoneDigest); !allowed {
|
||||
writePublicTicketRateLimit(w, retry)
|
||||
return
|
||||
}
|
||||
}
|
||||
var responseBody []byte
|
||||
responseCode := http.StatusCreated
|
||||
var revision int64
|
||||
@@ -293,7 +307,6 @@ func (s *Server) createTicketForActor(w http.ResponseWriter, r *http.Request, ac
|
||||
return nil
|
||||
}
|
||||
|
||||
phoneDigest := s.cipher.Digest(phone)
|
||||
var duplicates []model.QueueTicket
|
||||
if err := tx.Select("id", "display_number", "status").
|
||||
Where("project_id = ? AND queue_session_id = ? AND phone_hmac = ? AND status = ?",
|
||||
|
||||
Reference in New Issue
Block a user