Browse Source

新增V3刷新refresh token接口

locky 3 years ago
parent
commit
f8c0f32242
2 changed files with 71 additions and 0 deletions
  1. 1 0
      Ansjer/urls.py
  2. 70 0
      Controller/UserController.py

+ 1 - 0
Ansjer/urls.py

@@ -36,6 +36,7 @@ urlpatterns = [
     url(r'^account/forget$', UserController.ForgetPwdView.as_view()),
     url(r'^account/email-re-pwd$', UserController.EmailResetPwdView.as_view()),
     url(r'^account/refreshTk$', UserController.refreshTokenView.as_view()),
+    url(r'^v3/account/refreshTk$', UserController.refreshTokenViewV3.as_view()),
     url(r'^favicon.ico$', UserManger.success, name=u'favicon.ico'),
     url(r'^account/showUserMore$', UserManger.showUserMoreView.as_view()),
     url(r'^account/perfectUserInfo$', UserManger.perfectUserInfoView.as_view()),

+ 70 - 0
Controller/UserController.py

@@ -623,6 +623,76 @@ class refreshTokenView(TemplateView):
             return response.json(444, 'token')
 
 
+class refreshTokenViewV3(TemplateView):
+    @method_decorator(csrf_exempt)
+    def dispatch(self, *args, **kwargs):
+        return super(refreshTokenViewV3, self).dispatch(*args, **kwargs)
+
+    def post(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        content_type = request.META.get('CONTENT_TYPE', None)
+        if content_type == 'application/json':
+            request_dict = json.loads(request.body.decode('utf-8'))
+        else:
+            request_dict = request.POST
+        return self.validation(request_dict)
+
+    def get(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        request_dict = request.GET
+        return self.validation(request_dict)
+
+    def validation(self, request_dict):
+        token = request_dict.get('token', None)
+        lang = request_dict.get('lang', None)
+        language = request_dict.get('language', None)
+        password = request_dict.get('userPwd', None)
+
+        response = ResponseObject(lang)
+        if not token:
+            return response.json(444, 'token')
+
+        if lang is None:
+            lang = language
+
+        try:
+            # token检验
+            tko = TokenObject(token)
+            if tko.code != 0:
+                return response.json(tko.code)
+            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, user_qs[0].password):
+                    return response.json(111)
+
+            res = tko.refresh()     # 更新refresh_token
+
+            # 更新用户扩展信息语言
+            user_ex_qs = UserExModel.objects.filter(userID_id=userID)
+            if user_ex_qs.exists():
+                nowTime = int(time.time())
+                update_dict = {
+                    'updTime': nowTime,
+                    'region': lang
+                }
+                user_ex_qs.update(**update_dict)
+            return response.json(0, res)
+        except Exception as e:
+            print(e)
+            return response.json(500, repr(e))
+
+
 # 获取验证码
 class v2authCodeView(TemplateView):