Browse Source

暂时保存

tanghongbin 4 years ago
parent
commit
e4471d3c44
4 changed files with 102 additions and 0 deletions
  1. 2 0
      Ansjer/urls.py
  2. 98 0
      Controller/UserController.py
  3. 1 0
      Model/models.py
  4. 1 0
      Service/CommonService.py

+ 2 - 0
Ansjer/urls.py

@@ -233,6 +233,8 @@ urlpatterns = [
     url(r'^ios/authsign', UserController.AppleAuthLogin.as_view()),
     url(r'^appLog/(?P<operation>.*)$', AppLogController.AppLogView.as_view()),
 
+    # 本地登录接口
+    url(r'^local/(?P<operation>.*)$', UserController.LocalUserView.as_view()),
 
     # app 设备消息模板
     # 路由加参数参考

+ 98 - 0
Controller/UserController.py

@@ -3455,3 +3455,101 @@ class AppleAuthLogin(View):
             print('---')
             print(user_qs)
             return self.do_login(user_qs, response)
+
+
+class LocalUserView(View):
+
+    def get(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        request_dict = request.GET
+        operation = kwargs.get('operation', None)
+        return self.validate(request_dict, operation, CommonService.get_ip_address(request))
+
+    def post(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        request_dict = request.POST
+        operation = kwargs.get('operation', None)
+        return self.validate(request_dict, operation, CommonService.get_ip_address(request))
+
+    def validate(self, request_dict, operation, ip):
+        language = request_dict.get('language', None)
+        response = ResponseObject(lang=language)
+        print(CommonService.getAddr(ip))
+        if operation == 'login':
+            return self.do_local_login(request_dict, response)
+        else:
+            return response.json(404)
+
+    def do_local_login(self, request_dict, response):
+        username = request_dict.get('username', None)
+        app_bundle_id = request_dict.get('app_bundle_id', None)
+
+        user_qs = Device_User.objects.filter(username=username)
+        if user_qs.exists():
+            return self.do_login(user_qs, response)
+        else:
+            # 如果用户为绑定过则创建用户并进行登录返回token
+            userID = CommonService.getUserID(μs=False, setOTAID=True)
+            nickname = 'local_{num}'.format(num=CommonService.RandomStr(6, False))
+            return self.do_register(userID, nickname, response, app_bundle_id)
+
+    # 登录
+    def do_login(self, user_qs, 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"]})
+        # 增加角色
+        user_qs[0].role.add(Role.objects.get(rid=1))
+        role_dict = ModelService.own_role(userID=userID)
+        res['rid'] = role_dict['rid']
+        res['roleName'] = role_dict['roleName']
+        res['permList'] = ModelService.own_permission(userID)
+        res['userID'] = userID
+        # 昵称,邮箱,电话,刷新,头像
+        userIconPath = str(user_list[0]["userIconPath"])
+        if userIconPath and userIconPath.find('static/') != -1:
+            userIconPath = userIconPath.replace('static/', '').replace('\\', '/')
+            res['userIconUrl'] = SERVER_DOMAIN + 'account/getAvatar/' + userIconPath
+        else:
+            res['userIconUrl'] = ''
+        res['NickName'] = user_list[0]["NickName"] if user_list[0]["NickName"] is not None else ''
+        res['username'] = user_list[0]["username"] if user_list[0]["username"] is not None else ''
+        res['userEmail'] = user_list[0]["userEmail"] if user_list[0]["userEmail"] is not None else ''
+        res['phone'] = user_list[0]["phone"] if user_list[0]["phone"] is not None else ''
+        print(res)
+        # 添加用户登录类型
+        oauth_qs = UserOauth2Model.objects.filter(userID__userID=userID)
+        auth_type = 0
+        if oauth_qs.exists():
+            auth_type = oauth_qs[0].authType
+        res['authType'] = auth_type
+        user_qs.update(last_login=now_time, online=True)
+        return response.json(0, res)
+
+    def do_register(self, userID, nickname, response, appBundleId):
+        data_valid = DataValid()
+        if data_valid.name_validate(userID) is not True:
+            return response.json(105)
+        try:
+            Device_User.objects.create(
+                username=userID,
+                NickName=nickname,
+                password=make_password('123456'),
+                userID=userID,
+                is_active=True,
+                user_isValid=True,
+                is_local=True
+            )
+
+        except Exception as e:
+            errorInfo = traceback.format_exc()
+            print(errorInfo)
+            return response.json(424, repr(e))
+        else:
+            user_qs = Device_User.objects.filter(Q(userID=userID))
+            print('---')
+            print(user_qs)
+            return self.do_login(user_qs, response)

+ 1 - 0
Model/models.py

@@ -149,6 +149,7 @@ class Device_User(AbstractBaseUser):
     phone = models.CharField(max_length=16, verbose_name=u'手机号', default='', blank=True)
     fingerprint_enable = models.SmallIntegerField(default=0, verbose_name=u'是否开启了指纹登录') # 0:未开启,1:已开启
     fingerprint_key = models.CharField(max_length=128, default='', verbose_name=u'客户端用于解码的密钥等信息')
+    is_local = models.BooleanField(blank=True, default=False, verbose_name=u'是否是本地登录用户')
     objects = UserManager()
 
     USERNAME_FIELD = 'userID'  # 必须有一个唯一标识

+ 1 - 0
Service/CommonService.py

@@ -99,6 +99,7 @@ class CommonService:
         # ip数据库
         db = IPIPDatabase(base_dir + '/DB/17monipdb.dat')
         addr = db.lookup(ip)
+        print(addr)
         ts = addr.split('\t')[0]
         return ts