Prechádzať zdrojové kódy

忘记了传回token,修复

Shellmiao 3 rokov pred
rodič
commit
51c3e0e1ba
2 zmenil súbory, kde vykonal 46 pridanie a 19 odobranie
  1. 16 8
      account/interface.md
  2. 30 11
      account/views.py

+ 16 - 8
account/interface.md

@@ -1,10 +1,18 @@
 # 登录
 ## 返回值接口约定
-result:['token time out',
-    'detected new device',
-    'wrong account or password',
-    'illegal input',
-    'illegal method, please use post',
-    'login successfully',
-    'reg successfully',
-]
+result: 'token time out'  
+  
+result: 'detected new device, please login',  
+  
+result: 'wrong account or password',  
+
+result: 'illegal input',  
+
+result: 'illegal method, please use post',  
+
+result: 'login successfully',   token:'xxxxxx'  
+
+result: 'reg successfully',  
+
+result: 'logout successfully',  
+

+ 30 - 11
account/views.py

@@ -35,7 +35,7 @@ def user_login(request):
                         # 登录
                         user = device.user
                         login(request, user)
-                        response = {'result': 'login successfully'}
+                        response = {'result': 'login successfully', 'token': device.token}
                         return HttpResponse(json.dumps(response))
                         # return redirect("chat:index")
                     else:
@@ -43,22 +43,29 @@ def user_login(request):
                         return HttpResponse(json.dumps(response))
                 # 已过期的token并且已经被删除
                 except Devices.DoesNotExist:
-                    response = {'result': 'detected new device'}
+                    response = {'result': 'detected new device, please login'}
                     return HttpResponse(json.dumps(response))
             else:
                 # 检测账号密码是否匹配数据库中的一个用户
                 # 如果均匹配,则返回此User对象
                 user = authenticate(username=data['username'], password=data['password'])
                 if user:
-                    # 新建一个该user的设备
-                    device = Devices()
-                    device.user = user
-                    device.device_uid = generate_random_str(10)
-                    device.token = hash(
-                        device.device_uid + device.user.username + datetime.datetime.now().strftime("%Y%m%d%H%M%S"))
-                    device.save()
+                    if data['token'] == 'token':
+                        # 新建一个该user的设备
+                        device = create_new_device(user)
+                    else:
+                        # 此时,客户端带来了过期的旧token,现在需要更新旧的token
+                        try:
+                            device = Devices.objects.filter(token__exact=data['token']).get()
+                            device.token = hash(
+                                device.device_uid + device.user.username + datetime.datetime.now().strftime(
+                                    "%Y%m%d%H%M%S"))
+                            device.save()
+                        except Devices.DoesNotExist:
+                            # 新建一个该user的设备
+                            device = create_new_device(user)
                     login(request, user)
-                    response = {'result': 'login successfully'}
+                    response = {'result': 'login successfully', 'token': device.token}
                     return HttpResponse(json.dumps(response))
                 else:
                     response = {'result': 'wrong account or password'}
@@ -77,6 +84,17 @@ def user_login(request):
         return HttpResponse(json.dumps(response))
 
 
+# 新建一个该user的设备
+def create_new_device(user):
+    device = Devices()
+    device.user = user
+    device.device_uid = generate_random_str(10)
+    device.token = hash(
+        device.device_uid + device.user.username + datetime.datetime.now().strftime("%Y%m%d%H%M%S"))
+    device.save()
+    return device
+
+
 def generate_random_str(random_length=16):
     """
     生成一个指定长度的随机字符串
@@ -91,7 +109,8 @@ def generate_random_str(random_length=16):
 
 def user_logout(request):
     logout(request)
-    return redirect("chat:index")
+    response = {'result', 'logout successfully'}
+    return HttpResponse(json.dumps(response))
 
 
 def user_register(request):