peng пре 1 година
родитељ
комит
63da9f935f
2 измењених фајлова са 52 додато и 24 уклоњено
  1. 30 22
      Controller/UserController.py
  2. 22 2
      Object/TokenObject.py

+ 30 - 22
Controller/UserController.py

@@ -2346,17 +2346,11 @@ class v3LoginView(TemplateView):
             return response.json(111)
 
         userID = users['userID']
-        tko = TokenObject()
-        res = tko.generate(
-            data={'userID': userID, 'lang': response.lang, 'user': users['username'], 'm_code': '123413243214'})
         oauth_qs = UserOauth2Model.objects.filter(userID__userID=userID)
         auth_type = 0
         if oauth_qs.exists():
             auth_type = oauth_qs[0].authType
 
-        if tko.code != 0:
-            return response.json(tko.code)
-
         # 网关推送新增内容
         app_bundle_id = request_dict.get('appBundleId', None)
         app_type = request_dict.get('appType', None)
@@ -2365,6 +2359,12 @@ class v3LoginView(TemplateView):
         m_code = request_dict.get('mCode', None)
         lang = request_dict.get('lang', 'en')
         tz = request_dict.get('tz', None)
+        tko = TokenObject()
+        res = tko.generate(
+            data={'userID': userID, 'lang': response.lang, 'user': users['username'], 'm_code': '123413243214',
+                  'appBundleId': app_bundle_id, 'tokenVal': token_val})
+        if tko.code != 0:
+            return response.json(tko.code)
         if all([app_bundle_id, app_type, push_type, token_val, m_code, tz]):
             gateway_push_qs = GatewayPush.objects.filter(user_id=userID, m_code=m_code)
             if gateway_push_qs.exists():
@@ -2429,6 +2429,7 @@ class oneClickLoginView(TemplateView):
     def validation(self, request_dict):
         token = request_dict.get('token', None)
         language = request_dict.get('language', 'en')
+        app_bundle_id = request_dict.get('appBundleId', None)
         response = ResponseObject(language)
 
         if not token:
@@ -2455,6 +2456,7 @@ class oneClickLoginView(TemplateView):
                         'userID': user_qs[0]['userID'],
                         'lang': response.lang,
                         'user': user_qs[0]['username'],
+                        'appBundleId': app_bundle_id,
                         'm_code': '123413243214'
                     }
                 )
@@ -2492,6 +2494,7 @@ class oneClickLoginView(TemplateView):
                     'userID': userID,
                     'lang': response.lang,
                     'user': users.username,
+                    'appBundleId': app_bundle_id,
                     'm_code': '123413243214'
                 }
             )
@@ -2817,7 +2820,7 @@ class wxAuthSignView(TemplateView):
                         userID = user_extend_qs[0].userID_id
                         print(userID)
                         user_qs = Device_User.objects.filter(userID=userID)
-                        return self.do_login(user_qs, response)
+                        return self.do_login(user_qs, appBundleID, response)
                     else:
                         # 如果用户为绑定过则创建用户并进行登录返回token
                         userID = CommonService.getUserID(getUser=False)
@@ -2832,13 +2835,14 @@ class wxAuthSignView(TemplateView):
         # if wxcode
 
     # 登录
-    def do_login(self, user_qs, response):
+    def do_login(self, user_qs, app_bundle_id, response):
         now_time = datetime.datetime.utcnow().replace(tzinfo=utc).astimezone(utc)
         userID = user_qs[0].userID
         print('userID' + userID)
         tko = TokenObject()
         user_list = user_qs.values("NickName", "userIconUrl", "userIconPath", "username", "userEmail", "phone")
-        res = tko.generate(data={'userID': userID, 'lang': response.lang, 'user': user_list[0]["username"]})
+        res = tko.generate(data={'userID': userID, 'lang': response.lang, 'user': user_list[0]["username"],
+                                 'appBundleId': app_bundle_id})
         # 增加角色
         user_qs[0].role.add(Role.objects.get(rid=1))
         role_dict = ModelService.own_role(userID=userID)
@@ -2897,7 +2901,7 @@ class wxAuthSignView(TemplateView):
             user_qs = Device_User.objects.filter(Q(userID=userID))
             print('---')
             print(user_qs)
-            return self.do_login(user_qs, response)
+            return self.do_login(user_qs, appBundleId, response)
 
 
 # 获取验证码
@@ -3983,6 +3987,7 @@ class Image_Code_RegisterView(TemplateView):
         response = ResponseObject(lang)
         email_scription = request_dict.get('email_scription', None)
         push_scription = request_dict.get('push_scription', None)
+        app_bundle_id = request_dict.get('appBundleId', None)
 
         if not all([userEmail, password, lang, imageCodeId, valid_code]):
             return response.json(444)
@@ -4085,16 +4090,17 @@ class Image_Code_RegisterView(TemplateView):
             subscription_thread = threading.Thread(target=UserSubscriptionControllerView.subscription,
                                                    args=(subscribers,))
             subscription_thread.start()
-        return self.do_login(email_qs, response)
+        return self.do_login(email_qs, app_bundle_id, response)
 
     @staticmethod
-    def do_login(user_qs, response):
+    def do_login(user_qs, app_bundle_id, response):
         now_time = datetime.datetime.utcnow().replace(tzinfo=utc).astimezone(utc)
         user_qs.update(last_login=now_time, online=True)
         userID = user_qs[0].userID
         tko = TokenObject()
         user_list = user_qs.values("NickName", "userIconUrl", "userIconPath", "username", "userEmail", "phone")
-        res = tko.generate(data={'userID': userID, 'lang': response.lang, 'user': user_list[0]["username"]})
+        res = tko.generate(data={'userID': userID, 'lang': response.lang, 'user': user_list[0]["username"],
+                                 'appBundleId': app_bundle_id})
         # 增加角色
         user_qs[0].role.add(Role.objects.get(rid=1))
         role_dict = ModelService.own_role(userID=userID)
@@ -4293,6 +4299,7 @@ class v3LoginByCodeView(View):
 
     def validate(self, request_dict, response):
         phone = request_dict.get('phone', None)
+        app_bundle_id = request_dict.get('appBundleId', None)
         code = request_dict.get('code', None)
 
         if phone and code:
@@ -4307,18 +4314,18 @@ class v3LoginByCodeView(View):
                 if login_code == code:
                     if response.lang is None:
                         response.lang = 'en'
-                    return self.do_phone_login(phone, response)
+                    return self.do_phone_login(phone, app_bundle_id, response)
                 else:
                     return response.json(121)
             else:
                 return response.json(120)
 
-    def do_phone_login(self, phone, response):
+    def do_phone_login(self, phone, app_bundle_id, response):
         user_qs = Device_User.objects.filter(Q(phone=phone) | Q(username=phone), is_active=True,
                                              user_isValid=True)
-        return self.valid_login(user_qs, response)
+        return self.valid_login(user_qs, app_bundle_id, response)
 
-    def valid_login(self, user_qs, response):
+    def valid_login(self, user_qs, app_bundle_id, response):
         if not user_qs.exists():
             return response.json(104)
         # users = user_qs.values('role__rid', 'role__roleName', 'userID', 'role', 'NickName', 'username', 'userEmail',
@@ -4330,7 +4337,7 @@ class v3LoginByCodeView(View):
         tko = TokenObject()
         res = tko.generate(
             data={'userID': userID, 'lang': response.lang, 'user': users['username'],
-                  'm_code': '123413243214'})
+                  'm_code': '123413243214', 'appBundleId': app_bundle_id})
         # 添加用户登录类型
         oauth_qs = UserOauth2Model.objects.filter(userID__userID=userID)
         auth_type = 0
@@ -4534,7 +4541,7 @@ class AppleAuthLogin(View):
                         userID = user_extend_qs[0].userID_id
                         print(userID)
                         user_qs = Device_User.objects.filter(userID=userID)
-                        return self.do_login(user_qs, response)
+                        return self.do_login(user_qs, app_bundle_id, response)
                     else:
                         # 如果用户为绑定过则创建用户并进行登录返回token
                         userID = CommonService.getUserID(getUser=False)
@@ -4553,13 +4560,14 @@ class AppleAuthLogin(View):
             return response.json(444)
 
     # 登录
-    def do_login(self, user_qs, response):
+    def do_login(self, user_qs, app_bundle_id, response):
         now_time = datetime.datetime.utcnow().replace(tzinfo=utc).astimezone(utc)
         userID = user_qs[0].userID
         print('userID' + userID)
         tko = TokenObject()
         user_list = user_qs.values("NickName", "userIconUrl", "userIconPath", "username", "userEmail", "phone")
-        res = tko.generate(data={'userID': userID, 'lang': response.lang, 'user': user_list[0]["username"]})
+        res = tko.generate(data={'userID': userID, 'lang': response.lang, 'user': user_list[0]["username"],
+                                 'appBundleId': app_bundle_id})
         # 增加角色
         user_qs[0].role.add(Role.objects.get(rid=1))
         role_dict = ModelService.own_role(userID=userID)
@@ -4619,7 +4627,7 @@ class AppleAuthLogin(View):
             user_qs = Device_User.objects.filter(Q(userID=userID))
             print('---')
             print(user_qs)
-            return self.do_login(user_qs, response)
+            return self.do_login(user_qs, appBundleId, response)
 
 
 class LocalUserView(View):

+ 22 - 2
Object/TokenObject.py

@@ -2,8 +2,10 @@ import datetime
 
 import jwt
 import time
+import requests
+from Object.RedisObject import RedisObject
 from Ansjer.config import OAUTH_ACCESS_TOKEN_SECRET, OAUTH_REFRESH_TOKEN_SECRET, OAUTH_ACCESS_TOKEN_TIME, \
-    OAUTH_REFRESH_TOKEN_TIME, CONFIG_INFO, CONFIG_TEST, CONFIG_CN
+    OAUTH_REFRESH_TOKEN_TIME, CONFIG_INFO, CONFIG_TEST, CONFIG_CN, DETECT_PUSH_DOMAINS
 
 
 class TokenObject:
@@ -32,6 +34,7 @@ class TokenObject:
             self.userID = res.get('userID', None)
             self.lang = res.get('lang', None)
             self.user = res.get('user', '')
+            app_bundle_id = res.get('appBundleId', None)
             # 刷新登录时间
             # if self.userID:
             #     print(self.user)
@@ -50,6 +53,17 @@ class TokenObject:
                 return
             else:
                 if self.userID:
+                    if app_bundle_id:
+                        redis_obj = RedisObject()
+                        key = 'token_user_{}_{}'.format(self.userID, app_bundle_id)
+                        redis_token = redis_obj.get_data(key)
+                        if not redis_token:
+                            redis_obj.set_data(key, self.token)
+                            self.code = 0
+                            return res
+                        if self.token != redis_token:
+                            self.code = 310
+                            return
                     self.code = 0
                     return res
                 else:
@@ -93,7 +107,13 @@ class TokenObject:
                     'refresh_expire': refresh_expire,
                     'refresh_token': refresh_token,
                 }
-
+            app_bundle_id = data.get('appBundleId', None)
+            if app_bundle_id:
+                redis_obj = RedisObject()
+                key = 'token_user_{}_{}'.format(data['userID'], data['appBundleId'])
+                redis_obj.set_data(key, access_token)
+                if data['tokenVal']:
+                    pass  # 请求推送
         except Exception as e:
             self.code = 309
             print(repr(e))