control_auth.py 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. #coding=utf-8
  2. '''
  3. '''
  4. import json,time,random,datetime
  5. from django.db import transaction
  6. from django.db.models import Q
  7. import common.models as cm
  8. import common.error_info as ce
  9. import common.common_functions as ccf
  10. import common.common_control as ccc
  11. from utils.aestool import aescbc
  12. def gen_code():
  13. """
  14. """
  15. code = ""
  16. while True:
  17. code = "".join([str(random.choice([0,1,2,3,5,6,7,8,9])) for x in range(0,6)])
  18. if cm.UserInfo.objects.filter(usercode=code).exists():
  19. time.sleep(0.1)
  20. continue
  21. break
  22. return code
  23. def add_wxauth_info(request):
  24. """
  25. """
  26. qdata = request.json
  27. need_params = ["nickname","avatar","openid"]
  28. mse = ccf.check_params(*need_params,**qdata)
  29. if mse:
  30. raise ce.TipException(mse)
  31. vals = ccf.get_need_params(*need_params,**qdata)
  32. obj,flag = cm.UserInfo.objects.get_or_create(openid=vals.get("openid"))
  33. obj.nickname = vals.get("username")
  34. obj.avatar = vals.get("avatar")
  35. obj.save()
  36. return obj
  37. def get_wxauth_info(request):
  38. """
  39. """
  40. user = request.user
  41. uid = user.get("id")
  42. user = cm.UserInfo.objects.filter(id=uid).values().first()
  43. cur_match_id = ccc.get_signup_match().id
  44. #player = cm.Player.objects.filter(user_id=uid,match_id=cur_match_id).order_by("-id").first()
  45. gt_time = datetime.timedelta(days=-365)+datetime.datetime.now()
  46. player = cm.Player.objects.filter(user_id=uid,match_status=1,ctime__gte=gt_time).order_by("-id").first()
  47. #print(uid,cur_match_id)
  48. if player:
  49. user["role"] = player.role
  50. else:
  51. user["role"] = 0
  52. if user["comment_status"]==0:
  53. user["role"] = 0
  54. return user
  55. def update_wxauth_info(request):
  56. """
  57. """
  58. uid = request.user.id
  59. qdata = request.json
  60. cm.UserInfo.objects.filter(id=uid).update(userinfo=json.dumps(qdata))
  61. return user
  62. def login_user(request):
  63. """
  64. """
  65. info = request.json
  66. usercode = info.get('usercode')
  67. openid = info.get('openid')
  68. avatar = info.get('avatarUrl')
  69. nickname = info.get('nickName')
  70. if not usercode:
  71. raise ce.TipException(u"缺少参数!")
  72. user = cm.UserInfo.objects.filter(usercode=usercode).first()
  73. if not user:
  74. raise ce.TipException(u"用户代号不存在!")
  75. if user.is_bind:
  76. if not openid == user.openid:
  77. raise ce.TipException(u"微信号与用户代码不配!")
  78. if not cm.Player.objects.filter(user_id=user.id).first():
  79. raise ce.TipException(u"该账号未参加任何比赛,不能登录!")
  80. user.openid = openid
  81. user.avatar = avatar
  82. user.nickname = nickname
  83. user.is_bind = 1
  84. user.save()
  85. tstr = "{}_{}{}".format(user.id,time.time(),random.randint(100000,999999))
  86. token = aescbc.encrypt(tstr)
  87. return {"id":user.id,"token":token}
  88. def login_user_v3(request):
  89. """
  90. """
  91. info = request.json
  92. openid = info.get('openid')
  93. avatar = info.get('avatarUrl')
  94. nickname = info.get('nickName')
  95. phone = info.get('phone','')
  96. phcode = info.get('phcode')
  97. unionid = info.get('unionid','')
  98. #if not openid and not unionid:
  99. # raise ce.TipException(u"缺少openid!")
  100. if not openid and not phone:
  101. raise ce.TipException(u"缺少openid!")
  102. #if not ccc.cache.get(openid):
  103. # raise ce.TipException(u"非法openid!")
  104. print(phone,openid)
  105. if phone:
  106. user = cm.UserInfo.objects.filter(Q(phone=phone)).order_by("-id").first()
  107. else:
  108. user = cm.UserInfo.objects.filter(Q(openid=openid)).order_by("-id").first()
  109. print(user.id)
  110. if not user:
  111. #新用户
  112. usercode = gen_code()
  113. user,flag = cm.UserInfo.objects.get_or_create(
  114. openid = openid,
  115. )
  116. user.avatar = avatar
  117. user.nickname = nickname
  118. user.usercode = usercode
  119. user.is_bind = 1
  120. user.username = nickname
  121. user.unionid = unionid
  122. user.save()
  123. tstr = "{}_{}{}".format(user.id,time.time(),random.randint(100000,999999))
  124. token = aescbc.encrypt(tstr)
  125. return {"id":user.id,"token":token,"status":1,"role":user.role}
  126. else:
  127. user.avatar = avatar
  128. user.nickname = nickname
  129. user.is_bind = 1
  130. user.username = nickname
  131. user.unionid = unionid
  132. user.save()
  133. tstr = "{}_{}{}".format(user.id,time.time(),random.randint(100000,999999))
  134. token = aescbc.encrypt(tstr)
  135. return {"id":user.id,"token":token,"status":1,"role":user.role}
  136. def bind_user_phone(request):
  137. """
  138. """
  139. uid = request.user.id
  140. qdata = request.json
  141. phone = qdata.get("phone")
  142. phcode = qdata.get("phcode")
  143. orgcode = ccc.cache.get(phone)
  144. if not phcode == orgcode:
  145. raise ce.TipException(u"验证码不正确!")
  146. cm.UserInfo.objects.filter(id=uid).update(phone=phone)