fix: User.ClubID默认xq导致星之界新用户误判,创建时置空并以wx绑定为准
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
)
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user