Ver Fonte

Merge remote-tracking branch 'remotes/origin/peng' into test

Ansjer há 2 anos atrás
pai
commit
1673f619bc

+ 21 - 14
AdminController/UserManageController.py

@@ -51,41 +51,46 @@ class LoginView(TemplateView):
     def validates(self, request_dict, response):
         username = request_dict.get('username', None)
         password = request_dict.get('password', None)
+        password_version = request_dict.get('pwdVersion', 'V1')
         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)
+            return self.do_email_login(username, password, response, password_version)
         elif data_valid.mobile_validate(username):
-            return self.do_phone_login(username, password, response)
+            return self.do_phone_login(username, password, response, password_version)
         elif data_valid.name_validate(username):
-            return self.do_name_login(username, password, response)
+            return self.do_name_login(username, password, response, password_version)
         else:
             return response.json(107)
 
-    def do_email_login(self, email, password, response):
+    def do_email_login(self, email, password, response, password_version):
         user_qs = Device_User.objects.filter(Q(username=email) | Q(userEmail=email))
-        return self.valid_login(user_qs, password, response)
+        return self.valid_login(user_qs, password, response, password_version)
 
-    def do_phone_login(self, phone, password, response):
+    def do_phone_login(self, phone, password, response, password_version):
         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)
+        return self.valid_login(user_qs, password, response, password_version)
 
-    def do_name_login(self, username, password, response):
+    def do_name_login(self, username, password, response, password_version):
         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)
+        return self.valid_login(user_qs, password, response, password_version)
 
-    def valid_login(self, user_qs, password, response):
+    def valid_login(self, user_qs, password, response, password_version):
         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']):
+        if password_version == 'V1':
+            check_flag = check_password(password, users['password'])
+        else:
+            check_flag = CommonService.check_password(password, users['password'])
+        if not check_flag:
             return response.json(111)
         userID = users['userID']
         tko = TokenObject(returntpye='pc')
@@ -401,6 +406,7 @@ class UserManagement(View):
         roleName = request_dict.get('role', None)
         password = request_dict.get('password', None)
         isEdit = request_dict.get('isEdit', None)
+        password_version = request_dict.get('pwdVersion', 'V1')
 
         # 校验用户名,邮箱,密码是否符合规则
         dataValid = DataValid()
@@ -411,7 +417,8 @@ class UserManagement(View):
         if not isEdit:  # 添加用户需要输入密码
             if not password or not dataValid.password_validate(password):
                 return response.json(444, {'Parameter error': 'password'})
-
+        if password_version == 'V1':
+            password = make_password(password)
         try:
             if isEdit:  # 编辑用户信息
                 userID = request_dict.get('userID')
@@ -419,7 +426,7 @@ class UserManagement(View):
                     "username": username,
                     "NickName": username,
                     "userEmail": userEmail,
-                    "password": make_password(password),
+                    "password": password,
                 }
                 device_user_qs = Device_User.objects.filter(userID=userID)
                 device_user_qs.update(**user_data)
@@ -441,7 +448,7 @@ class UserManagement(View):
                     "username": username,
                     "NickName": username,
                     "userEmail": userEmail,
-                    "password": make_password(password),
+                    "password": password,
                     "userID": CommonService.getUserID(μs=False, setOTAID=True),
                     "is_active": True,
                     "user_isValid": True,

+ 5 - 4
Controller/AdminManage.py

@@ -98,14 +98,15 @@ class AdminManage(TemplateView):
         if not own_permission:
             return response.json(404)
         duserID = request_dict.get('duserID', None)
-        userPwd = request_dict.get('userPwd', None)
+        userPwd = request_dict.get('userPwd', '123456')
+        password_version = request_dict.get('pwdVersion', 'V1')
         if not duserID:
             return response.json(444, 'duserID')
         UserValid = Device_User.objects.filter(userID=duserID)
         if UserValid:
-            if userPwd is None:
-                userPwd = '123456'
-            is_update = UserValid.update(password=make_password(userPwd))
+            if password_version == 'V1':
+                userPwd = make_password(userPwd)
+            is_update = UserValid.update(password=userPwd)
             if is_update:
                 return response.json(0)
             else:

+ 7 - 1
Controller/InitController.py

@@ -13,6 +13,7 @@ from Model.models import Device_User, Device_Info, Order_Model, UidPushModel, Us
     AppLogModel, UserFamily, FamilyMember, FamilyMemberJoin, SmartScene, DeviceSuperPassword, SceneLog
 from Object.RedisObject import RedisObject
 from Object.ResponseObject import ResponseObject
+from Service.CommonService import CommonService
 
 
 class InitView(View):
@@ -56,13 +57,18 @@ class InitView(View):
         LOGGER = logging.getLogger('info')
         username = request_dict.get('username', None)
         password = request_dict.get('password', None)
+        password_version = request_dict.get('pwdVersion', 'V1')
         response = ResponseObject()
         device_user_qs = Device_User.objects.filter(username=username).values('password', 'userID')
         if not device_user_qs.exists():
             return response.json(104)
 
         cipher_password, user_id = device_user_qs[0]['password'], device_user_qs[0]['userID']
-        if not check_password(password, cipher_password):
+        if password_version == 'V1':
+            check_flag = check_password(password, cipher_password)
+        else:
+            check_flag = CommonService.check_password(password, cipher_password)
+        if not check_flag:
             return response.json(111)
         try:
             with transaction.atomic():

+ 3 - 1
Controller/TestApi.py

@@ -890,5 +890,7 @@ class testView(View):
     @staticmethod
     def password(request_dict, response):
         password = request_dict.get('password', None)
-        password = make_password(password)
+        password_version = request_dict.get('pwdVersion', 'V1')
+        if password_version == 'V1':
+            password = make_password(password)
         return response.json(0)

+ 10 - 6
Controller/TestController.py

@@ -6,6 +6,7 @@ from django.contrib.auth.hashers import make_password, check_password
 from django.views import View
 
 from Object.uidManageResponseObject import uidManageResponseObject
+from Service.CommonService import CommonService
 
 
 class TestView(View):
@@ -35,19 +36,22 @@ class TestView(View):
 
     def do_create_password(self, request_dict, response):
         password = request_dict.get('password', None)
-        print(password)
-        result = make_password(password)
-        print(result)
-        print(check_password(password, result))
+        password_version = request_dict.get('pwdVersion', 'V1')
+        if password_version == 'V1':
+            password = make_password(password)
+        result = password
         return response.json(0, result)
 
     def do_check_password(self, request_dict, response):
         password = request_dict.get('password', None)
         password2 = request_dict.get('password2', None)
+        password_version = request_dict.get('pwdVersion', 'V1')
         print(password)
         print(password2)
-        check = check_password(password, password2)
-
+        if password_version == 'V1':
+            check = check_password(password, password2)
+        else:
+            check = CommonService.check_password(password, password2)
         return response.json(0, check)
 
     # def make_password(self, password):

+ 309 - 196
Controller/UserController.py

@@ -180,6 +180,7 @@ class registerView(TemplateView):
         authCode = request_dict.get('identifyingCode', None)
         language = request_dict.get('language', None)
         unique = request_dict.get('unique', None)
+        password_version = request_dict.get('pwdVersion', 'V1')
         if unique:
             delete_local_account(unique)
         response = ResponseObject(language)
@@ -188,11 +189,11 @@ class registerView(TemplateView):
             username = username.strip()
             if userEmail:
                 userEmail = userEmail.strip()
-            return self.register(username, userEmail, password, authCode, response)
+            return self.register(username, userEmail, password, authCode, response, password_version)
         else:
             return response.json(800)
 
-    def register(self, username, userEmail, password, authCode, response):
+    def register(self, username, userEmail, password, authCode, response, password_version):
         dataValid = DataValid()
         reds = RedisObject()
         identifyingCode = reds.get_data(key=username + '_identifyingCode')
@@ -207,7 +208,12 @@ class registerView(TemplateView):
                 return response.json(120)
         if authCode != identifyingCode:
             return response.json(121)
-        if dataValid.password_validate(password):
+        if password_version == 'V1':
+            password = make_password(password)
+            re_flag = dataValid.password_validate(password)
+        else:
+            re_flag = True
+        if re_flag:
             if dataValid.email_validate(username):
                 if userEmail:
                     print(userEmail)
@@ -225,7 +231,7 @@ class registerView(TemplateView):
                         "username": username,
                         "NickName": username,
                         "userEmail": userEmail,
-                        "password": make_password(password),
+                        "password": password,
                         "userID": CommonService.getUserID(μs=False, setOTAID=True),
                         "is_active": True,
                         "user_isValid": True,
@@ -262,7 +268,7 @@ class registerView(TemplateView):
                         "username": username,
                         "NickName": username,
                         "userEmail": userEmail,
-                        "password": make_password(password),
+                        "password": password,
                         "userID": CommonService.getUserID(μs=False, setOTAID=True),
                         "is_active": True,
                         "user_isValid": True,
@@ -351,6 +357,7 @@ class ChangePwdView(TemplateView):
         token = request_dict.get('token', None)
         oldPwd = request_dict.get('oldPwd', None)
         newPwd = request_dict.get('newPwd', None)
+        password_version = request_dict.get('pwdVersion', 'V1')
         response = ResponseObject()
         if oldPwd is None and newPwd is None:
             return response.json(800)
@@ -358,17 +365,22 @@ class ChangePwdView(TemplateView):
         response.lang = tko.lang
         if tko.code != 0:
             return response.json(tko.code)
-        return self.updatePwd(tko.userID, oldPwd, newPwd, response)
+        return self.updatePwd(tko.userID, oldPwd, newPwd, response, password_version)
 
-    def updatePwd(self, userID, oldPwd, newPwd, response):
+    def updatePwd(self, userID, oldPwd, newPwd, response, password_version):
         user_qs = Device_User.objects.filter(userID=userID)
         if not user_qs.exists():
             return response.json(104)
-        c_p = check_password(oldPwd, user_qs[0].password)
+        if password_version == 'V1':
+            c_p = check_password(oldPwd, user_qs[0].password)
+        else:
+            c_p = CommonService.check_password(oldPwd, user_qs[0].password)
         # 密码是否正确
         if not c_p:
             return response.json(111)
-        update = user_qs.update(password=make_password(newPwd))
+        if password_version == 'V1':
+            newPwd = make_password(newPwd)
+        update = user_qs.update(password=newPwd)
         if update:
             return response.json(0)
         else:
@@ -395,35 +407,37 @@ class v3ChangePwdView(TemplateView):
         token = request_dict.get('token', None)
         oldPwd = request_dict.get('oldPwd', None)
         newPwd = request_dict.get('newPwd', None)
+        password_version = request_dict.get('pwdVersion', 'V1')
         response = ResponseObject()
         # 解密
         try:
-            for i in range(1, 4):
-                if i == 1:
-                    oldPwd = base64.b64decode(oldPwd)
-                    oldPwd = oldPwd.decode('utf-8')
-                    oldPwd = oldPwd[1:-1]
-                if i == 2:
-                    oldPwd = base64.b64decode(oldPwd)
-                    oldPwd = oldPwd.decode('utf-8')
-                    oldPwd = oldPwd[2:-2]
-                if i == 3:
-                    oldPwd = base64.b64decode(oldPwd)
-                    oldPwd = oldPwd.decode('utf-8')
-                    oldPwd = oldPwd[3:-3]
-            for i in range(1, 4):
-                if i == 1:
-                    newPwd = base64.b64decode(newPwd)
-                    newPwd = newPwd.decode('utf-8')
-                    newPwd = newPwd[1:-1]
-                if i == 2:
-                    newPwd = base64.b64decode(newPwd)
-                    newPwd = newPwd.decode('utf-8')
-                    newPwd = newPwd[2:-2]
-                if i == 3:
-                    newPwd = base64.b64decode(newPwd)
-                    newPwd = newPwd.decode('utf-8')
-                    newPwd = newPwd[3:-3]
+            if password_version == 'V1':
+                for i in range(1, 4):
+                    if i == 1:
+                        oldPwd = base64.b64decode(oldPwd)
+                        oldPwd = oldPwd.decode('utf-8')
+                        oldPwd = oldPwd[1:-1]
+                    if i == 2:
+                        oldPwd = base64.b64decode(oldPwd)
+                        oldPwd = oldPwd.decode('utf-8')
+                        oldPwd = oldPwd[2:-2]
+                    if i == 3:
+                        oldPwd = base64.b64decode(oldPwd)
+                        oldPwd = oldPwd.decode('utf-8')
+                        oldPwd = oldPwd[3:-3]
+                for i in range(1, 4):
+                    if i == 1:
+                        newPwd = base64.b64decode(newPwd)
+                        newPwd = newPwd.decode('utf-8')
+                        newPwd = newPwd[1:-1]
+                    if i == 2:
+                        newPwd = base64.b64decode(newPwd)
+                        newPwd = newPwd.decode('utf-8')
+                        newPwd = newPwd[2:-2]
+                    if i == 3:
+                        newPwd = base64.b64decode(newPwd)
+                        newPwd = newPwd.decode('utf-8')
+                        newPwd = newPwd[3:-3]
         except Exception as e:
             return response.json(111)
         else:
@@ -433,17 +447,22 @@ class v3ChangePwdView(TemplateView):
             response.lang = tko.lang
             if tko.code != 0:
                 return response.json(tko.code)
-            return self.updatePwd(tko.userID, oldPwd, newPwd, response)
+            return self.updatePwd(tko.userID, oldPwd, newPwd, response, password_version)
 
-    def updatePwd(self, userID, oldPwd, newPwd, response):
+    def updatePwd(self, userID, oldPwd, newPwd, response, password_version):
         user_qs = Device_User.objects.filter(userID=userID)
         if not user_qs.exists():
             return response.json(104)
-        c_p = check_password(oldPwd, user_qs[0].password)
+        if password_version == 'V1':
+            c_p = check_password(oldPwd, user_qs[0].password)
+        else:
+            c_p = CommonService.check_password(oldPwd, user_qs[0].password)
         # 密码是否正确
         if not c_p:
             return response.json(111)
-        update = user_qs.update(password=make_password(newPwd))
+        if password_version == 'V1':
+            newPwd = make_password(newPwd)
+        update = user_qs.update(password=newPwd)
         if update:
             return response.json(0)
         else:
@@ -463,6 +482,7 @@ class createPwd(TemplateView):
     def validation(self, request_dict):
         token = request_dict.get('token', None)
         password = request_dict.get('password', None)
+        password_version = request_dict.get('pwdVersion', 'V1')
         response = ResponseObject()
 
         if not all([token, password]):
@@ -477,11 +497,13 @@ class createPwd(TemplateView):
             userID = tko.userID
 
             # 解密
-            for i in range(1, 4):
-                password = base64.b64decode(password)
-                password = password.decode('utf-8')
-                password = password[i:-i]
-            update = Device_User.objects.filter(userID=userID).update(password=make_password(password))
+            if password_version == 'V1':
+                for i in range(1, 4):
+                    password = base64.b64decode(password)
+                    password = password.decode('utf-8')
+                    password = password[i:-i]
+                password = make_password(password)
+            update = Device_User.objects.filter(userID=userID).update(password=password)
             if update:
                 return response.json(0)
             else:
@@ -705,6 +727,7 @@ class refreshTokenViewV3(TemplateView):
         lang = request_dict.get('lang', None)
         language = request_dict.get('language', None)
         password = request_dict.get('userPwd', None)
+        password_version = request_dict.get('pwdVersion', 'V1')
         response = ResponseObject(lang)
         if not token:
             return response.json(444, 'token')
@@ -721,17 +744,21 @@ class refreshTokenViewV3(TemplateView):
             userID = tko.userID
             tko.lang = lang
             if password:  # 检验密码
-                password = password.strip()
-                # 解密
-                for i in range(1, 4):
-                    password = base64.b64decode(password)
-                    password = password.decode('utf-8')
-                    password = password[i:-i]
                 user_qs = Device_User.objects.filter(userID=userID).values('password')
                 if not user_qs.exists():
                     return response.json(104)
-                if not check_password(password, list(user_qs)[0]['password']):
-                    return response.json(111)
+                password = password.strip()
+                # 解密
+                if password_version == 'V1':
+                    for i in range(1, 4):
+                        password = base64.b64decode(password)
+                        password = password.decode('utf-8')
+                        password = password[i:-i]
+                    if not check_password(password, list(user_qs)[0]['password']):
+                        return response.json(111)
+                else:
+                    if not CommonService.check_password(password, list(user_qs)[0]['password']):
+                        return response.json(111)
                 now_time = datetime.datetime.utcnow().replace(tzinfo=utc).astimezone(utc)
                 user_qs.update(last_login=now_time)
             # 更新用户扩展信息语言
@@ -995,6 +1022,7 @@ class v2registerView(TemplateView):
         lang = request_dict.get('lang', None)
         unique = request_dict.get('unique', None)
         number = request_dict.get('number', None)
+        password_version = request_dict.get('pwdVersion', 'V1')
         if unique:
             delete_local_account(unique)
         response = ResponseObject(lang)
@@ -1005,17 +1033,22 @@ class v2registerView(TemplateView):
         if authcode is None:
             return response.json(444, 'identifyingCode')
         if phone is not None:
-            return self.do_phone_register(phone, password, authcode, number, response)
+            return self.do_phone_register(phone, password, authcode, number, response, password_version)
         elif email is not None:
-            return self.do_email_register(email, password, authcode, number, response)
+            return self.do_email_register(email, password, authcode, number, response, password_version)
         else:
             return response.json(444, 'phone or email')
 
-    def do_phone_register(self, phone, password, authcode, number, response):
+    def do_phone_register(self, phone, password, authcode, number, response, password_version):
         data_valid = DataValid()
         if data_valid.mobile_validate(phone) is not True:
             return response.json(100)
-        if data_valid.password_validate(password) is not True:
+        if password_version == 'V1':
+            re_flag = data_valid.password_validate(password)
+            password = make_password(password)
+        else:
+            re_flag = True
+        if re_flag is not True:
             return response.json(109)
         reds = RedisObject()
         identifyingCode = reds.get_data(key=phone + '_identifyingCode')
@@ -1029,12 +1062,13 @@ class v2registerView(TemplateView):
         # 是否已存在
         if phone_qs.exists():
             return response.json(101)
+
         try:
             create_data = {
                 "username": phone,
                 "NickName": phone,
                 "phone": phone,
-                "password": make_password(password),
+                "password": password,
                 "userID": CommonService.getUserID(μs=False, setOTAID=True),
                 "is_active": True,
                 "user_isValid": True,
@@ -1081,11 +1115,16 @@ class v2registerView(TemplateView):
         print(res)
         return response.json(0, res)
 
-    def do_email_register(self, email, password, authcode, number, response):
+    def do_email_register(self, email, password, authcode, number, response, password_version):
         data_valid = DataValid()
         if data_valid.email_validate(email) is not True:
             return response.json(105)
-        if data_valid.password_validate(password) is not True:
+        if password_version == 'V1':
+            re_flag = data_valid.email_validate(email)
+            password = make_password(password)
+        else:
+            re_flag = True
+        if re_flag is not True:
             return response.json(109)
         reds = RedisObject()
         identifyingCode = reds.get_data(key=email + '_identifyingCode')
@@ -1104,7 +1143,7 @@ class v2registerView(TemplateView):
                 "username": email,
                 "NickName": email,
                 "userEmail": email,
-                "password": make_password(password),
+                "password": password,
                 "userID": CommonService.getUserID(μs=False, setOTAID=True),
                 "is_active": True,
                 "user_isValid": True,
@@ -1154,6 +1193,7 @@ class v3registerView(TemplateView):
         phone = request_dict.get('phone', None)
         email = request_dict.get('email', None)
         password = request_dict.get('password', None)
+        password_version = request_dict.get('pwdVersion', 'V1')
         authcode = request_dict.get('authcode', None)
         lang = request_dict.get('lang', None)
         unique = request_dict.get('unique', None)
@@ -1166,20 +1206,21 @@ class v3registerView(TemplateView):
         response = ResponseObject(lang)
         # 解密
         try:
-            for i in range(1, 4):
-                if i == 1:
-                    password = base64.b64decode(password)
-                    password = password.decode('utf-8')
-                    password = password[1:-1]
-                if i == 2:
-                    password = base64.b64decode(password)
-                    password = password.decode('utf-8')
-                    password = password[2:-2]
-                if i == 3:
-                    password = base64.b64decode(password)
-                    password = password.decode('utf-8')
-                    password = password[3:-3]
-            print(password)
+            if password_version == 'V1':
+                for i in range(1, 4):
+                    if i == 1:
+                        password = base64.b64decode(password)
+                        password = password.decode('utf-8')
+                        password = password[1:-1]
+                    if i == 2:
+                        password = base64.b64decode(password)
+                        password = password.decode('utf-8')
+                        password = password[2:-2]
+                    if i == 3:
+                        password = base64.b64decode(password)
+                        password = password.decode('utf-8')
+                        password = password[3:-3]
+                print(password)
         except Exception as e:
             return response.json(111)
         try:
@@ -1206,17 +1247,24 @@ class v3registerView(TemplateView):
                 return response.json(444, 'identifyingCode')
 
             if phone is not None:
-                return self.do_phone_register(phone, password, authcode, number, region_status, response)
+                return self.do_phone_register(phone, password, authcode, number, region_status, response,
+                                              password_version)
             elif email is not None:
-                return self.do_email_register(email, password, authcode, number, region_status, response)
+                return self.do_email_register(email, password, authcode, number, region_status, response,
+                                              password_version)
             else:
                 return response.json(444, 'phone or email')
 
-    def do_phone_register(self, phone, password, authcode, number, region_status, response):
+    def do_phone_register(self, phone, password, authcode, number, region_status, response, password_version):
         data_valid = DataValid()
         if data_valid.mobile_validate(phone) is not True:
             return response.json(100)
-        if data_valid.password_validate(password) is not True:
+        if password_version == 'V1':
+            re_flag = data_valid.password_validate(password)
+            password = make_password(password)
+        else:
+            re_flag = True
+        if re_flag is not True:
             return response.json(109)
         reds = RedisObject()
         identifyingCode = reds.get_data(key=phone + '_identifyingCode')
@@ -1235,7 +1283,7 @@ class v3registerView(TemplateView):
                 "username": phone,
                 "NickName": phone,
                 "phone": phone,
-                "password": make_password(password),
+                "password": password,
                 "userID": CommonService.getUserID(μs=False, setOTAID=True),
                 "is_active": True,
                 "user_isValid": True,
@@ -1282,11 +1330,16 @@ class v3registerView(TemplateView):
         res['phone'] = user_list[0]["phone"] if user_list[0]["phone"] is not None else ''
         return response.json(0, res)
 
-    def do_email_register(self, email, password, authcode, number, region_status, response):
+    def do_email_register(self, email, password, authcode, number, region_status, response, password_version):
         data_valid = DataValid()
         if data_valid.email_validate(email) is not True:
             return response.json(105)
-        if data_valid.password_validate(password) is not True:
+        if password_version == 'V1':
+            re_flag = data_valid.password_validate(password)
+            password = make_password(password)
+        else:
+            re_flag = True
+        if re_flag is not True:
             return response.json(109)
         reds = RedisObject()
         identifyingCode = reds.get_data(key=email + '_identifyingCode')
@@ -1306,7 +1359,7 @@ class v3registerView(TemplateView):
                 "username": email,
                 "NickName": email,
                 "userEmail": email,
-                "password": make_password(password),
+                "password": password,
                 "userID": CommonService.getUserID(μs=False, setOTAID=True),
                 "is_active": True,
                 "user_isValid": True,
@@ -1591,6 +1644,7 @@ class v2resetPwdByCodeView(TemplateView):
         phone = request_dict.get('phone', None)
         email = request_dict.get('email', None)
         password = request_dict.get('password', None)
+        password_version = request_dict.get('pwdVersion', 'V1')
         authcode = request_dict.get('authcode', None)
         print("1111111111111111111111")
         if password is None or authcode is None:
@@ -1599,18 +1653,23 @@ class v2resetPwdByCodeView(TemplateView):
         password = password.strip()
         if phone is not None:
             phone = phone.strip()
-            return self.do_phone_pwd_reset(phone, authcode, password, response)
+            return self.do_phone_pwd_reset(phone, authcode, password, response, password_version)
         elif email is not None:
             email = email.strip()
-            return self.do_email_pwd_reset(email, authcode, password, response)
+            return self.do_email_pwd_reset(email, authcode, password, response, password_version)
         else:
             return response.json(444, 'phone')
 
-    def do_email_pwd_reset(self, email, authcode, password, response):
+    def do_email_pwd_reset(self, email, authcode, password, response, password_version):
         data_valid = DataValid()
         if data_valid.email_validate(email) is not True:
             return response.json(105)
-        if data_valid.password_validate(password) is not True:
+        if password_version == 'V1':
+            re_flag = data_valid.password_validate(password)
+            password = make_password(password)
+        else:
+            re_flag = True
+        if re_flag is not True:
             return response.json(109)
         user_qs = Device_User.objects.filter(Q(userEmail=email) | Q(username=email))
         if not user_qs.exists():
@@ -1623,16 +1682,21 @@ class v2resetPwdByCodeView(TemplateView):
             return response.json(121)
         # if not reds.set_data(key=email + '_forgetPwdResetCode', val=resetCode, expire=300):
         #     return response.json(10, '生成缓存错误')
-        user_qs.update(password=make_password(password))
+        user_qs.update(password=password)
         if not reds.del_data(email + '_forgetPwdResetCode'):
             return response.json(10, '删除缓存失败')
         return response.json(0)
 
-    def do_phone_pwd_reset(self, phone, authcode, password, response):
+    def do_phone_pwd_reset(self, phone, authcode, password, response, password_version):
         data_valid = DataValid()
         if data_valid.mobile_validate(phone) is not True:
             return response.json(100)
-        if data_valid.password_validate(password) is not True:
+        if password_version == 'V1':
+            re_flag = data_valid.password_validate(password)
+            password = make_password(password)
+        else:
+            re_flag = True
+        if re_flag is not True:
             return response.json(109)
         user_qs = Device_User.objects.filter(Q(phone=phone) | Q(username=phone))
         if not user_qs.exists():
@@ -1645,7 +1709,7 @@ class v2resetPwdByCodeView(TemplateView):
             return response.json(121)
         # if not reds.set_data(key=phone + '_forgetPwdResetCode', val=resetCode, expire=300):
         #     return response.json(10, '生成缓存错误')
-        user_qs.update(password=make_password(password))
+        user_qs.update(password=password)
         if not reds.del_data(phone + '_forgetPwdResetCode'):
             return response.json(10, '删除缓存失败')
         return response.json(0)
@@ -1714,6 +1778,7 @@ class v3resetPwdByCodeView(TemplateView):
         phone = request_dict.get('phone', None)
         email = request_dict.get('email', None)
         password = request_dict.get('password', None)
+        password_version = request_dict.get('pwdVersion', 'V1')
         authcode = request_dict.get('authcode', None)
         if password is None or authcode is None:
             return response.json(444, 'password,authcode')
@@ -1721,20 +1786,21 @@ class v3resetPwdByCodeView(TemplateView):
         password = password.strip()
         # 解密
         try:
-            for i in range(1, 4):
-                if i == 1:
-                    password = base64.b64decode(password)
-                    password = password.decode('utf-8')
-                    password = password[1:-1]
-                if i == 2:
-                    password = base64.b64decode(password)
-                    password = password.decode('utf-8')
-                    password = password[2:-2]
-                if i == 3:
-                    password = base64.b64decode(password)
-                    password = password.decode('utf-8')
-                    password = password[3:-3]
-            print(password)
+            if password_version == 'V1':
+                for i in range(1, 4):
+                    if i == 1:
+                        password = base64.b64decode(password)
+                        password = password.decode('utf-8')
+                        password = password[1:-1]
+                    if i == 2:
+                        password = base64.b64decode(password)
+                        password = password.decode('utf-8')
+                        password = password[2:-2]
+                    if i == 3:
+                        password = base64.b64decode(password)
+                        password = password.decode('utf-8')
+                        password = password[3:-3]
+                print(password)
         except Exception as e:
             return response.json(111)
         try:
@@ -1756,18 +1822,23 @@ class v3resetPwdByCodeView(TemplateView):
             return response.json(121)
         if phone is not None:
             phone = phone.strip()
-            return self.do_phone_pwd_reset(phone, authcode, password, response)
+            return self.do_phone_pwd_reset(phone, authcode, password, response, password_version)
         elif email is not None:
             email = email.strip()
-            return self.do_email_pwd_reset(email, authcode, password, response)
+            return self.do_email_pwd_reset(email, authcode, password, response, password_version)
         else:
             return response.json(444, 'phone')
 
-    def do_email_pwd_reset(self, email, authcode, password, response):
+    def do_email_pwd_reset(self, email, authcode, password, response, password_version):
         data_valid = DataValid()
         if data_valid.email_validate(email) is not True:
             return response.json(105)
-        if data_valid.password_validate(password) is not True:
+        if password_version == 'V1':
+            re_flag = data_valid.password_validate(password)
+            password = make_password(password)
+        else:
+            re_flag = True
+        if re_flag is not True:
             return response.json(109)
         user_qs = Device_User.objects.filter(Q(userEmail=email) | Q(username=email))
         if not user_qs.exists():
@@ -1780,16 +1851,21 @@ class v3resetPwdByCodeView(TemplateView):
             return response.json(121)
         # if not reds.set_data(key=email + '_forgetPwdResetCode', val=resetCode, expire=300):
         #     return response.json(10, '生成缓存错误')
-        user_qs.update(password=make_password(password))
+        user_qs.update(password=password)
         if not reds.del_data(email + '_forgetPwdResetCode'):
             return response.json(10, '删除缓存失败')
         return response.json(0)
 
-    def do_phone_pwd_reset(self, phone, authcode, password, response):
+    def do_phone_pwd_reset(self, phone, authcode, password, response, password_version):
         data_valid = DataValid()
         if data_valid.mobile_validate(phone) is not True:
             return response.json(100)
-        if data_valid.password_validate(password) is not True:
+        if password_version == 'V1':
+            re_flag = data_valid.password_validate(password)
+            password = make_password(password)
+        else:
+            re_flag = True
+        if re_flag is not True:
             return response.json(109)
         user_qs = Device_User.objects.filter(Q(phone=phone) | Q(username=phone))
         if not user_qs.exists():
@@ -1802,7 +1878,7 @@ class v3resetPwdByCodeView(TemplateView):
             return response.json(121)
         # if not reds.set_data(key=phone + '_forgetPwdResetCode', val=resetCode, expire=300):
         #     return response.json(10, '生成缓存错误')
-        user_qs.update(password=make_password(password))
+        user_qs.update(password=password)
         if not reds.del_data(phone + '_forgetPwdResetCode'):
             return response.json(10, '删除缓存失败')
         return response.json(0)
@@ -1868,6 +1944,7 @@ class v2LoginView(TemplateView):
     def validates(self, request_dict, response):
         username = request_dict.get('userName', None)
         password = request_dict.get('userPwd', None)
+        password_version = request_dict.get('pwdVersion', 'V1')
         number = request_dict.get('number', None)
         if not username or not password:
             return response.json(111)
@@ -1875,35 +1952,39 @@ class v2LoginView(TemplateView):
         password = password.strip()
         data_valid = DataValid()
         if data_valid.email_validate(username):
-            return self.do_email_login(username, password, number, response)
+            return self.do_email_login(username, password, number, response, password_version)
         elif data_valid.mobile_validate(username):
-            return self.do_phone_login(username, password, number, response)
+            return self.do_phone_login(username, password, number, response, password_version)
         elif data_valid.name_validate(username):
-            return self.do_name_login(username, password, number, response)
+            return self.do_name_login(username, password, number, response, password_version)
         else:
             return response.json(107)
 
-    def do_email_login(self, email, password, number, response):
+    def do_email_login(self, email, password, number, response, password_version):
         user_qs = Device_User.objects.filter(Q(username=email) | Q(userEmail=email))
-        return self.valid_login(user_qs, password, number, response)
+        return self.valid_login(user_qs, password, number, response, password_version)
 
-    def do_phone_login(self, phone, password, number, response):
+    def do_phone_login(self, phone, password, number, response, password_version):
         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, number, response)
+        return self.valid_login(user_qs, password, number, response, password_version)
 
-    def do_name_login(self, username, password, number, response):
+    def do_name_login(self, username, password, number, response, password_version):
         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, number, response)
+        return self.valid_login(user_qs, password, number, response, password_version)
 
-    def valid_login(self, user_qs, password, number, response):
+    def valid_login(self, user_qs, password, number, response, password_version):
         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']):
+        if password_version == 'V1':
+            check_flag = check_password(password, users['password'])
+        else:
+            check_flag = CommonService.check_password(password, users['password'])
+        if not check_flag:
             return response.json(111)
         userID = users['userID']
         tko = TokenObject()
@@ -2056,6 +2137,7 @@ class v3LoginView(TemplateView):
     def validates(self, request_dict, response):
         username = request_dict.get('userName', None)
         password = request_dict.get('userPwd', None)
+        password_version = request_dict.get('pwdVersion', 'V1')
         subscribe = request_dict.get('subscribe', None)
         number = request_dict.get('number', None)
         if not username or not password:
@@ -2065,25 +2147,26 @@ class v3LoginView(TemplateView):
         print("准备解密")
         # 解密
         try:
-            for i in range(1, 4):
-                if i == 1:
-                    # 第一次先解密
-                    password = base64.b64decode(password)
-                    password = password.decode('utf-8')
-                    # 截去第一位,最后一位
-                    password = password[1:-1]
-                if i == 2:
-                    # 第2次先解密
-                    password = base64.b64decode(password)
-                    password = password.decode('utf-8')
-                    # 去前2位,后2位
-                    password = password[2:-2]
-                if i == 3:
-                    # 第3次先解密
-                    password = base64.b64decode(password)
-                    password = password.decode('utf-8')
-                    # 去前3位,后3位
-                    password = password[3:-3]
+            if password_version == 'V1':
+                for i in range(1, 4):
+                    if i == 1:
+                        # 第一次先解密
+                        password = base64.b64decode(password)
+                        password = password.decode('utf-8')
+                        # 截去第一位,最后一位
+                        password = password[1:-1]
+                    if i == 2:
+                        # 第2次先解密
+                        password = base64.b64decode(password)
+                        password = password.decode('utf-8')
+                        # 去前2位,后2位
+                        password = password[2:-2]
+                    if i == 3:
+                        # 第3次先解密
+                        password = base64.b64decode(password)
+                        password = password.decode('utf-8')
+                        # 去前3位,后3位
+                        password = password[3:-3]
         except Exception as e:
             return response.json(111)
         else:
@@ -2111,6 +2194,7 @@ class v3LoginView(TemplateView):
         return self.valid_login(user_qs, password, response, subscribe, number, request_dict)
 
     def valid_login(self, user_qs, password, response, subscribe, number, request_dict):
+        password_version = request_dict.get('pwdVersion', 'V1')
         if not user_qs.exists():
             return response.json(104)
         if subscribe:
@@ -2119,7 +2203,11 @@ class v3LoginView(TemplateView):
         users = user_qs.values('role__rid', 'role__roleName', 'userID', 'NickName', 'username', 'userEmail',
                                'phone', 'password', 'userIconPath', 'fingerprint_enable', 'fingerprint_key',
                                'subscribe_email', 'region_country')[0]
-        if not check_password(password, users['password']):
+        if password_version == 'V1':
+            check_flag = check_password(password, users['password'])
+        else:
+            check_flag = CommonService.check_password(password, users['password'])
+        if not check_flag:
             return response.json(111)
 
         userID = users['userID']
@@ -3018,6 +3106,7 @@ class OauthPerfectView(TemplateView):
         phone = request_dict.get('phone', None)
         email = request_dict.get('email', None)
         password = request_dict.get('password', None)
+        password_version = request_dict.get('pwdVersion', 'V1')
         authcode = request_dict.get('authcode', None)
         token = request_dict.get('token', None)
         token = request_dict.get('token')
@@ -3033,18 +3122,23 @@ class OauthPerfectView(TemplateView):
             return response.json(444, 'password,authcode')
         if phone is not None:
             phone = phone.strip()
-            return self.do_phone(tko, phone, authcode, password, response)
+            return self.do_phone(tko, phone, authcode, password, response, password_version)
         elif email is not None:
             email = email.strip()
-            return self.do_email(tko, email, authcode, password, response)
+            return self.do_email(tko, email, authcode, password, response, password_version)
         else:
             return response.json(444, 'phone')
 
-    def do_email(self, tko, email, authcode, password, response):
+    def do_email(self, tko, email, authcode, password, response, password_version):
         data_valid = DataValid()
         if data_valid.email_validate(email) is not True:
             return response.json(105)
-        if data_valid.password_validate(password) is not True:
+        if password_version == 'V1':
+            re_flag = data_valid.password_validate(password)
+            password = make_password(password)
+        else:
+            re_flag = True
+        if re_flag is not True:
             return response.json(109)
 
         if tko.code == 0:
@@ -3061,16 +3155,21 @@ class OauthPerfectView(TemplateView):
             return response.json(121)
         # if not reds.set_data(key=email + '_forgetPwdResetCode', val=resetCode, expire=300):
         #     return response.json(10, '生成缓存错误')
-        user_qs.update(userEmail=email, password=make_password(password))
+        user_qs.update(userEmail=email, password=password)
         if not reds.del_data(email + '_OauthPerfect'):
             return response.json(10, '删除缓存失败')
         return response.json(0)
 
-    def do_phone(self, tko, phone, authcode, password, response):
+    def do_phone(self, tko, phone, authcode, password, response, password_version):
         data_valid = DataValid()
         if data_valid.mobile_validate(phone) is not True:
             return response.json(100)
-        if data_valid.password_validate(password) is not True:
+        if password_version == 'V1':
+            re_flag = data_valid.password_validate(password)
+            password = make_password(password)
+        else:
+            re_flag = True
+        if re_flag is not True:
             return response.json(109)
 
         if tko.code == 0:
@@ -3088,7 +3187,7 @@ class OauthPerfectView(TemplateView):
             return response.json(121)
         # if not reds.set_data(key=phone + '_forgetPwdResetCode', val=resetCode, expire=300):
         #     return response.json(10, '生成缓存错误')
-        user_qs.update(phone=phone, password=make_password(password))
+        user_qs.update(phone=phone, password=password)
         if not reds.del_data(str(phone) + '_OauthPerfect'):
             return response.json(10, '删除缓存失败')
         return response.json(0)
@@ -3154,38 +3253,43 @@ class alexaAuthView(TemplateView):
     def validates(self, request_dict, response):
         username = request_dict.get('userName', None)
         password = request_dict.get('userPwd', None)
+        password_version = request_dict.get('pwdVersion', 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)
+            return self.do_email_login(username, password, response, password_version)
         elif data_valid.mobile_validate(username):
-            return self.do_phone_login(username, password, response)
+            return self.do_phone_login(username, password, response, password_version)
         elif data_valid.name_validate(username):
-            return self.do_name_login(username, password, response)
+            return self.do_name_login(username, password, response, password_version)
         else:
             return response.json(107)
 
-    def do_email_login(self, email, password, response):
+    def do_email_login(self, email, password, response, password_version):
         user_qs = Device_User.objects.filter(Q(username=email) | Q(userEmail=email))
-        return self.valid_login(user_qs, password, response)
+        return self.valid_login(user_qs, password, response, password_version)
 
-    def do_phone_login(self, phone, password, response):
+    def do_phone_login(self, phone, password, response, password_version):
         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)
+        return self.valid_login(user_qs, password, response, password_version)
 
-    def do_name_login(self, username, password, response):
+    def do_name_login(self, username, password, response, password_version):
         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)
+        return self.valid_login(user_qs, password, response, password_version)
 
-    def valid_login(self, user_qs, password, response):
+    def valid_login(self, user_qs, password, response, password_version):
         if not user_qs.exists():
             return response.json(104)
         users = user_qs.values('userID', 'password', 'region_country')[0]
-        if not check_password(password, users['password']):
+        if password_version == 'V1':
+            check_flag = check_password(password, users['password'])
+        else:
+            check_flag = CommonService.check_password(password, users['password'])
+        if not check_flag:
             return response.json(111)
         userID = users['userID']
         region_country = users['region_country']
@@ -3512,6 +3616,7 @@ class Image_Code_RegisterView(TemplateView):
         """
         userEmail = request_dict.get('userEmail', None)
         password = request_dict.get('userPwd', None)
+        password_version = request_dict.get('pwdVersion', None)
         imageCodeId = request_dict.get('imageCodeId', None)
         valid_code = request_dict.get('id_v_code', None)
         unique = request_dict.get('unique', None)
@@ -3528,19 +3633,21 @@ class Image_Code_RegisterView(TemplateView):
         region_status = int(region_status) if region_status else 0
 
         try:
-            for i in range(1, 4):
-                if i == 1:
-                    password = base64.b64decode(password)
-                    password = password.decode('utf-8')
-                    password = password[1:-1]
-                if i == 2:
-                    password = base64.b64decode(password)
-                    password = password.decode('utf-8')
-                    password = password[2:-2]
-                if i == 3:
-                    password = base64.b64decode(password)
-                    password = password.decode('utf-8')
-                    password = password[3:-3]
+            if password_version == 'V1':
+                for i in range(1, 4):
+                    if i == 1:
+                        password = base64.b64decode(password)
+                        password = password.decode('utf-8')
+                        password = password[1:-1]
+                    if i == 2:
+                        password = base64.b64decode(password)
+                        password = password.decode('utf-8')
+                        password = password[2:-2]
+                    if i == 3:
+                        password = base64.b64decode(password)
+                        password = password.decode('utf-8')
+                        password = password[3:-3]
+                password = make_password(password)
         except Exception as e:
             return response.json(111)
         try:
@@ -3591,7 +3698,7 @@ class Image_Code_RegisterView(TemplateView):
             "username": username,
             "NickName": username,
             "userEmail": userEmail,
-            "password": make_password(password),
+            "password": password,
             "userID": CommonService.getUserID(μs=False, setOTAID=True),
             "is_active": True,
             "user_isValid": True,
@@ -4327,29 +4434,31 @@ def deleteAccount(request):
     lang = request.POST.get('lang', None)
     token = request.POST.get('token', None)
     password = request.POST.get('userPwd', None)
+    password_version = request.POST.get('pwdVersion', None)
     response = ResponseObject(lang=lang) if lang else ResponseObject()
     request.encoding = 'utf-8'
 
     try:
-        for i in range(1, 4):
-            if i == 1:
-                # 第一次先解密
-                password = base64.b64decode(password)
-                password = password.decode('utf-8')
-                # 截去第一位,最后一位
-                password = password[1:-1]
-            if i == 2:
-                # 第2次先解密
-                password = base64.b64decode(password)
-                password = password.decode('utf-8')
-                # 去前2位,后2位
-                password = password[2:-2]
-            if i == 3:
-                # 第3次先解密
-                password = base64.b64decode(password)
-                password = password.decode('utf-8')
-                # 去前3位,后3位
-                password = password[3:-3]
+        if password_version == 'V1':
+            for i in range(1, 4):
+                if i == 1:
+                    # 第一次先解密
+                    password = base64.b64decode(password)
+                    password = password.decode('utf-8')
+                    # 截去第一位,最后一位
+                    password = password[1:-1]
+                if i == 2:
+                    # 第2次先解密
+                    password = base64.b64decode(password)
+                    password = password.decode('utf-8')
+                    # 去前2位,后2位
+                    password = password[2:-2]
+                if i == 3:
+                    # 第3次先解密
+                    password = base64.b64decode(password)
+                    password = password.decode('utf-8')
+                    # 去前3位,后3位
+                    password = password[3:-3]
     except Exception as e:
         return response.json(111)
     else:
@@ -4367,7 +4476,11 @@ def deleteAccount(request):
             return response.json(104)
 
         userPWD = delUser.values('password')[0]
-        if not check_password(password, userPWD['password']):
+        if password_version == 'V1':
+            check_flag = check_password(password, userPWD['password'])
+        else:
+            check_flag = CommonService.check_password(password, userPWD['password'])
+        if not check_flag:
             return response.json(111)
 
         hasDevices = Device_Info.objects.filter(userID=userID)