fix: 邀请校验管事无ClubID时以当前小程序为准,注册失败打日志

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
XingQue
2026-07-08 18:06:22 +08:00
parent aeaa54583a
commit 2225722ab5
2 changed files with 25 additions and 3 deletions

View File

@@ -1,8 +1,11 @@
"""邀请码 / 邀请链俱乐部隔离。""" """邀请码 / 邀请链俱乐部隔离。"""
from jituan.constants import CLUB_ID_DEFAULT import logging
from jituan.services.club_resolver import resolve_club_id_for_wechat_request from jituan.services.club_resolver import resolve_club_id_for_wechat_request
from jituan.services.club_user import resolve_invite_party_club from jituan.services.club_user import resolve_invite_party_club
logger = logging.getLogger(__name__)
def assert_invite_same_club(request, inviter_user, invitee_user=None): def assert_invite_same_club(request, inviter_user, invitee_user=None):
""" """
@@ -12,14 +15,23 @@ def assert_invite_same_club(request, inviter_user, invitee_user=None):
""" """
club_id = resolve_club_id_for_wechat_request(request) club_id = resolve_club_id_for_wechat_request(request)
inviter_club = resolve_invite_party_club(inviter_user, club_id) inviter_club = resolve_invite_party_club(inviter_user, club_id)
if inviter_club is None and club_id == CLUB_ID_DEFAULT: if inviter_club is None:
inviter_club = CLUB_ID_DEFAULT # 管事未落库 ClubID/绑定时,以当前小程序为准(星之界扫码邀请常见)
inviter_club = club_id
if inviter_club != club_id: if inviter_club != club_id:
logger.warning(
'invite_guard 管事俱乐部不符 inviter=%s inviter_club=%s req_club=%s',
getattr(inviter_user, 'UserUID', '?'), inviter_club, club_id,
)
return False, '邀请码不属于当前小程序俱乐部' return False, '邀请码不属于当前小程序俱乐部'
if invitee_user is not None: if invitee_user is not None:
invitee_club = resolve_invite_party_club(invitee_user, club_id) invitee_club = resolve_invite_party_club(invitee_user, club_id)
if invitee_club is not None and invitee_club != club_id: if invitee_club is not None and invitee_club != club_id:
logger.warning(
'invite_guard 被邀请人俱乐部不符 invitee=%s invitee_club=%s req_club=%s',
getattr(invitee_user, 'UserUID', '?'), invitee_club, club_id,
)
return False, '您的账号归属与当前小程序不一致,请使用对应俱乐部小程序' return False, '您的账号归属与当前小程序不一致,请使用对应俱乐部小程序'
if invitee_club is not None and invitee_club != inviter_club: if invitee_club is not None and invitee_club != inviter_club:
return False, '邀请码与您的俱乐部不匹配' return False, '邀请码与您的俱乐部不匹配'

View File

@@ -555,9 +555,14 @@ class DashouZhuceView(APIView):
ok, msg = assert_invite_same_club(request, guanshi_profile.user, current_user) ok, msg = assert_invite_same_club(request, guanshi_profile.user, current_user)
if not ok: if not ok:
logger.warning(
'dashouzhuce 俱乐部校验失败 uid=%s club=%s msg=%s',
current_user.UserUID, resolve_club_id_for_wechat_request(request), msg,
)
return Response({ return Response({
'code': 403, 'code': 403,
'message': msg, 'message': msg,
'msg': msg,
'data': None 'data': None
}, status=status.HTTP_403_FORBIDDEN) }, status=status.HTTP_403_FORBIDDEN)
@@ -919,9 +924,14 @@ class WechatLoginAndDashouRegisterView(APIView):
request, guanshi_profile.user, user_main, request, guanshi_profile.user, user_main,
) )
if not ok: if not ok:
logger.warning(
'wdlyhdl 俱乐部校验失败 uid=%s club=%s msg=%s invite=%s',
user_main.UserUID, club_id, invite_msg, yaoqingma[:8],
)
return Response({ return Response({
'code': 403, 'code': 403,
'msg': invite_msg, 'msg': invite_msg,
'message': invite_msg,
'data': None 'data': None
}, status=status.HTTP_403_FORBIDDEN) }, status=status.HTTP_403_FORBIDDEN)