chenjunkai há 5 anos atrás
pai
commit
aeb2d573b0
2 ficheiros alterados com 65 adições e 1 exclusões
  1. 3 0
      Ansjer/urls.py
  2. 62 1
      Controller/UserController.py

+ 3 - 0
Ansjer/urls.py

@@ -172,6 +172,9 @@ urlpatterns = [
 
     url(r'^oss_crd/(?P<operation>.*)$', OssCrd.OssCrdView.as_view()),
     url(r'^push_deploy/(?P<operation>.*)$', PushDeploy.PushDeployView.as_view()),
+
+    url(r'^oalexa/auth', UserController.alexaAuthView.as_view()),
+
     # app 设备消息模板
     # 路由加参数参考
     # url(r'^(?P<path>.*)/(?P<UID>.*)/lls$', Test.Test.as_view(), name=u'gg'),

+ 62 - 1
Controller/UserController.py

@@ -1584,7 +1584,7 @@ class wxPerfectView(TemplateView):
                         return response.json(717)
                     access_token = res_json['access_token']
                     openid = res_json['openid']
-                    
+
                     if access_token and openid:
                         info_url = 'https://api.weixin.qq.com/sns/userinfo?access_token={access_token}&openid={openid}'.format(
                             access_token=access_token, openid=openid)
@@ -1987,3 +1987,64 @@ class UnbundingWXView(TemplateView):
                 return response.json(173)
         else:
             return response.json(tko.code)
+
+
+class alexaAuthView(TemplateView):
+    def post(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        # request_dict = json.loads(request.body.decode('utf-8'))
+        request_dict = request.POST
+        response = ResponseObject()
+        return self.validates(request_dict, response)
+
+    def get(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        request_dict = request.GET
+        response = ResponseObject()
+        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('userID', 'password')[0]
+        if not check_password(password, users['password']):
+            return response.json(111)
+        userID = users['userID']
+        uid_qs = Device_Info.objects.filter(userID_id=userID, isExist=1).values('UID', 'NickName')
+        uid_arr = []
+        for uid_q in uid_qs:
+            uid_arr.append({'uid': uid_q['UID'], 'nick': uid_q['NickName']})
+        res = {
+            'userID': userID,
+            'uid_arr': uid_arr
+        }
+        return response.json(0, res)