chenjunkai 6 年之前
父節點
當前提交
cc7a93c588
共有 1 個文件被更改,包括 105 次插入0 次删除
  1. 105 0
      Controller/UserController.py

+ 105 - 0
Controller/UserController.py

@@ -15,6 +15,7 @@ from Model.models import Role
 import traceback, datetime
 
 import simplejson as json
+from django.contrib import auth
 from django.contrib.auth.hashers import make_password, check_password  # 对密码加密模块
 from django.http import HttpResponseRedirect
 from django.utils.decorators import method_decorator
@@ -946,3 +947,107 @@ class v2resetPwdByCodeView(TemplateView):
         res['phone'] = user_list[0]["phone"] if user_list[0]["phone"] is not None else ''
         print(res)
         return response.json(0, res)
+
+
+# 登录
+class v2LoginView(TemplateView):
+    @method_decorator(csrf_exempt)  # @csrf_exempt
+    def dispatch(self, *args, **kwargs):
+        return super(v2LoginView, self).dispatch(*args, **kwargs)
+
+    @ratelimit(key='ip', rate='5/m')
+    def post(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        request_dict = request.POST
+        language = request_dict.get('language', 'en')
+        response = ResponseObject(language)
+        was_limited = getattr(request, 'limited', False)
+        if was_limited is True:
+            return response.json(5)
+        return self.validates(request_dict, response)
+
+    @ratelimit(key='ip', rate='5/m')
+    def get(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        request_dict = request.GET
+        language = request_dict.get('language', 'en')
+        response = ResponseObject(language)
+        was_limited = getattr(request, 'limited', False)
+        if was_limited is True:
+            return response.json(5)
+        return self.validates(request_dict, response)
+
+    def validates(self, request_dict, response):
+        username = request_dict.get('userName', None)
+        password = request_dict.get('userPwd', None)
+        # mcode = request_dict.get('mobileMechanicalCode', '')
+        if username is not None and password is not None:
+            username = username.strip()
+            password = password.strip()
+            data_valid = DataValid()
+            if data_valid.email_validate(username):
+                return self.do_email_login(username, password, response)
+            elif data_valid.mobile_validate(username):
+                return self.do_phone_login(username, password, response)
+            elif data_valid.name_validate(username):
+                return self.do_name_login(username, password, response)
+            else:
+                return response.json(107)
+        else:
+            return response.json(111)
+
+    def do_email_login(self, email, password, response):
+        user_qs = Device_User.objects.filter(Q(username=email) | Q(userEmail=email))
+        if not user_qs.exists():
+            return response.json(104)
+        if not user_qs[0].user_isValid or not user_qs[0].is_active:
+            return response.json(110)
+        return self.valid_login(user_qs, password, response)
+
+    def do_phone_login(self, phone, password, response):
+        user_qs = Device_User.objects.filter(Q(phone=phone) | Q(username=phone))
+        if not user_qs.exists():
+            return response.json(104)
+        if not user_qs[0].user_isValid or not user_qs[0].is_active:
+            return response.json(110)
+        return self.valid_login(user_qs, password, response)
+
+    def do_name_login(self, username, password, response):
+        user_qs = Device_User.objects.filter(Q(username=username) | Q(phone=username) | Q(userEmail=username))
+        if not user_qs.exists():
+            return response.json(104)
+        if not user_qs[0].user_isValid or not user_qs[0].is_active:
+            return response.json(110)
+        return self.valid_login(user_qs, password, response)
+
+    def valid_login(self, user_qs, password, response):
+        if not check_password(password, user_qs[0].password):
+            return response.json(111)
+        userID = user_qs[0].userID
+        print('userID' + userID)
+        tko = TokenObject()
+        res = tko.generate(data={'userID': userID, 'lang': response.lang})
+        if tko.code == 0:
+            now_time = datetime.datetime.utcnow().replace(tzinfo=utc).astimezone(utc)
+            user_qs.update(last_login=now_time, online=True, language=response.lang)
+            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
+            # 昵称,邮箱,电话,刷新,头像
+            user_list = user_qs.values("NickName", "userIconUrl", "userIconPath", "username", "userEmail", "phone")
+            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)
+            return response.json(0, res)
+        else:
+            return response.json(tko.code)