fix: User.ClubID默认xq导致星之界新用户误判,创建时置空并以wx绑定为准

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
XingQue
2026-07-08 18:34:45 +08:00
parent d025287785
commit ad33ee6c86
4 changed files with 29 additions and 16 deletions

View File

@@ -13,23 +13,30 @@ def resolve_invite_party_club(user, request_club_id=None):
if not user:
return None
explicit = (getattr(user, 'ClubID', None) or '').strip()
if explicit:
return explicit
uid = getattr(user, 'UserUID', None) or getattr(user, 'yonghuid', None)
if not uid:
return None
req = (request_club_id or '').strip()
if req:
hit = UserWxOpenid.query.filter(yonghuid=uid, club_id=req).first()
if hit:
# 当前小程序 openid 绑定优先ClubID 字段曾默认 xq会误判新用户
if req and uid:
if UserWxOpenid.query.filter(yonghuid=uid, club_id=req).exists():
return req
binding = UserWxOpenid.query.filter(yonghuid=uid).order_by('id').first()
if binding:
return binding.club_id
explicit = (getattr(user, 'ClubID', None) or '').strip()
if explicit:
if explicit == CLUB_ID_DEFAULT and uid:
has_real_xq = (
UserWxOpenid.query.filter(yonghuid=uid, club_id=CLUB_ID_DEFAULT).exists()
or bool(getattr(user, 'OpenID', None))
)
if not has_real_xq:
explicit = ''
if explicit:
return explicit
if uid:
binding = UserWxOpenid.query.filter(yonghuid=uid).order_by('id').first()
if binding:
return binding.club_id
return None

View File

@@ -151,6 +151,7 @@ def login_or_register_by_club(code, club_id=None, app_id=None, client_ip=''):
UserName=openid,
OpenID=openid if resolved_club_id == CLUB_ID_DEFAULT else None,
UnionID=unionid or None,
ClubID='',
)
try:
from django.db import IntegrityError

View File

@@ -44,7 +44,7 @@ class User(_UserBase):
IsStaff = models.BooleanField(default=False, db_column='IsStaff', verbose_name='是否员工')
IsSuperuser = models.BooleanField(default=False, db_column='IsSuperuser', verbose_name='是否超级用户')
ClubID = models.CharField(
max_length=16, default='xq', db_column='ClubID', verbose_name='所属俱乐部',
max_length=16, default='', db_column='ClubID', verbose_name='所属俱乐部',
null=True, blank=True,
)

View File

@@ -860,6 +860,7 @@ class WechatLoginAndDashouRegisterView(APIView):
UserName=openid,
OpenID=openid if club_id == CLUB_ID_DEFAULT else None,
UnionID=unionid or None,
ClubID='', # 勿用模型历史默认 xq注册成功后再写
)
user_main.save()
created = True
@@ -889,14 +890,18 @@ class WechatLoginAndDashouRegisterView(APIView):
from jituan.services.invite_guard import assert_invite_same_club
from jituan.services.club_resolver import resolve_club_id_for_wechat_request
from jituan.services.club_user import resolve_invite_party_club
ok, invite_msg = assert_invite_same_club(
request, guanshi_profile.user, user_main,
)
if not ok:
logger.warning(
'wdlyhdl 俱乐部校验失败 uid=%s club=%s msg=%s invite=%s',
user_main.UserUID, club_id, invite_msg, yaoqingma[:8],
'wdlyhdl 俱乐部校验失败 uid=%s club=%s invitee_club=%s inviter_club=%s msg=%s invite=%s',
user_main.UserUID, club_id,
resolve_invite_party_club(user_main, club_id),
resolve_invite_party_club(guanshi_profile.user, club_id),
invite_msg, yaoqingma[:8],
)
return legacy_miniapp_error(403, invite_msg)