瀏覽代碼

Merge branch 'dev' of http://192.168.136.45:3000/SERVER/AnsjerServer into dev

pengzhibo168 5 年之前
父節點
當前提交
0f6c0142cf
共有 3 個文件被更改,包括 114 次插入1 次删除
  1. 1 0
      Ansjer/urls.py
  2. 113 0
      Controller/UserController.py
  3. 0 1
      Model/models.py

+ 1 - 0
Ansjer/urls.py

@@ -114,6 +114,7 @@ urlpatterns = [
     # 重置密码验证码校验
     url(r'^v2/authcode/verify$', UserController.verifyAuthcode.as_view()),
     url(r'^v2/account/logout$', UserController.V2LogoutView.as_view()),
+    url(r'^v2/account/login$', UserController.v3LoginView.as_view()),
     # 新增
     url(r'^detect/detect_group_push$',DetectController.NotificationView.detect_group_push),
     url(r'^detect/add$', DetectController.PushNotificationView.as_view()),

+ 113 - 0
Controller/UserController.py

@@ -37,6 +37,7 @@ from Service.CommonService import CommonService
 from Service.ModelService import ModelService
 from Service.TemplateService import TemplateService
 from django.views.generic import View
+import base64
 
 
 # 获取验证码
@@ -1173,6 +1174,7 @@ class v2LoginView(TemplateView):
 
     # @ratelimit(key='ip', rate='5/m')
     def get(self, request, *args, **kwargs):
+        print("进来了")
         request.encoding = 'utf-8'
         request_dict = request.GET
         language = request_dict.get('language', 'en')
@@ -1248,6 +1250,114 @@ class v2LoginView(TemplateView):
             return response.json(tko.code)
 
 
+# 密码加密新登录
+class v3LoginView(TemplateView):
+    @method_decorator(csrf_exempt)  # @csrf_exempt
+    def dispatch(self, *args, **kwargs):
+        #chong 
+        return super(v3LoginView, 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)
+        if not username or not password:
+            return response.json(111)
+        username = username.strip()
+        password = password.strip()
+        # 解密
+        for i in range(1, 4):
+            if i == 1:
+                # 第一次先解密
+                password = base64.b64decode(password)
+                password = password.decode('utf-8')
+                # 去盐值
+                password = password.split('SALTP@SSWORD')[1]
+                print("解密去盐后的password:%s" % password)
+            else:
+                # 继续解密
+                password = base64.b64decode(password)
+                password = password.decode('utf-8')
+        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 InitInfoView(View):
 
@@ -2156,3 +2266,6 @@ class V2LogoutView(TemplateView):
             return response.json(0)
         else:
             return response.json(tko.code)
+
+
+

+ 0 - 1
Model/models.py

@@ -147,7 +147,6 @@ class Device_User(AbstractBaseUser):
     language = models.CharField(blank=True, max_length=16, default='en', verbose_name=u'语言地区')
     # 手机注册增加字段
     phone = models.CharField(max_length=16, verbose_name=u'手机号', default='', blank=True)
-
     objects = UserManager()
 
     USERNAME_FIELD = 'userID'  # 必须有一个唯一标识