Browse Source

新增v3版加密登录类和添加一条新url

WuYiPei 5 years ago
parent
commit
e07327a560
2 changed files with 98 additions and 0 deletions
  1. 1 0
      Ansjer/urls.py
  2. 97 0
      Controller/UserController.py

+ 1 - 0
Ansjer/urls.py

@@ -14,6 +14,7 @@ urlpatterns = [
     url(r'^account/authcode$', UserController.authCodeView.as_view()),
     url(r'^account/register$', UserController.registerView.as_view()),
     url(r'^account/login$', UserController.v2LoginView.as_view()),
+    url(r'^account/dc_login$', UserController.v3LoginView.as_view()),
     url(r'^account/logout$', UserController.LogoutView.as_view()),
     url(r'^account/changePwd$', UserController.ChangePwdView.as_view()),
     url(r'^account/forget$', UserController.ForgetPwdView.as_view()),

+ 97 - 0
Controller/UserController.py

@@ -1183,6 +1183,100 @@ class v2LoginView(TemplateView):
             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)
+        if not username or not password:
+            return response.json(111)
+        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)
+
+    def do_email_login(self, email, password, response):
+        user_qs = Device_User.objects.filter(Q(username=email) | Q(userEmail=email))
+        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), is_active=True, user_isValid=True)
+        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),
+                                             is_active=True, user_isValid=True)
+        return self.valid_login(user_qs, password, response)
+
+    def valid_login(self, user_qs, password, response):
+        if not user_qs.exists():
+            return response.json(104)
+        # users = user_qs.values('role__rid', 'role__roleName', 'userID', 'role', 'NickName', 'username', 'userEmail',
+        #                        'phone', 'password', 'userIconPath', 'user_isValid', 'is_active')[0]
+        users = user_qs.values('role__rid', 'role__roleName', 'userID', 'NickName', 'username', 'userEmail',
+                               'phone', 'password', 'userIconPath')[0]
+        if not check_password(password, users['password']):
+            return response.json(111)
+        userID = users['userID']
+        tko = TokenObject()
+        res = tko.generate(
+            data={'userID': userID, 'lang': response.lang, 'user': users['username'], 'm_code': '123413243214'})
+        if tko.code == 0:
+            now_time = datetime.datetime.utcnow().replace(tzinfo=utc).astimezone(utc)
+            user_qs.update(last_login=now_time, language=response.lang)
+            res['rid'] = users['role__rid']
+            res['roleName'] = users['role__roleName']
+            res['permList'] = ModelService.own_permission(userID)
+            res['userID'] = userID
+            # 昵称,邮箱,电话,刷新,头像
+            userIconPath = str(users['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'] = users['NickName'] if users['NickName'] is not None else ''
+            res['username'] = users['username'] if users['username'] is not None else ''
+            res['userEmail'] = users['userEmail'] if users['userEmail'] is not None else ''
+            res['phone'] = users['phone'] if users['phone'] is not None else ''
+            return response.json(0, res)
+        else:
+            return response.json(tko.code)
+
+
+# 密码加密新登录
+class v3LoginView(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)
@@ -2170,3 +2264,6 @@ class V2LogoutView(TemplateView):
             return response.json(0)
         else:
             return response.json(tko.code)
+
+
+