|
@@ -12,7 +12,7 @@ from django.http import QueryDict
|
|
from django.views import View
|
|
from django.views import View
|
|
from Ansjer.config import LOGGER
|
|
from Ansjer.config import LOGGER
|
|
|
|
|
|
-from Model.models import DeviceVersionInfo
|
|
|
|
|
|
+from Model.models import DeviceVersionInfo, Device_Info
|
|
from Object.Enums.RedisKeyConstant import RedisKeyConstant
|
|
from Object.Enums.RedisKeyConstant import RedisKeyConstant
|
|
from Object.RedisObject import RedisObject
|
|
from Object.RedisObject import RedisObject
|
|
from Object.ResponseObject import ResponseObject
|
|
from Object.ResponseObject import ResponseObject
|
|
@@ -54,6 +54,8 @@ class DeviceVersionInfoView(View):
|
|
userID = tko.userID
|
|
userID = tko.userID
|
|
if operation == 'getInfo':
|
|
if operation == 'getInfo':
|
|
return self.get_device_version_info(userID, request, request_dict, response)
|
|
return self.get_device_version_info(userID, request, request_dict, response)
|
|
|
|
+ elif operation == 'validateUserDevice':
|
|
|
|
+ return self.validateUserDevice(userID, request, request_dict, response)
|
|
else:
|
|
else:
|
|
return response.json(414)
|
|
return response.json(414)
|
|
|
|
|
|
@@ -105,3 +107,59 @@ class DeviceVersionInfoView(View):
|
|
|
|
|
|
except Exception as e:
|
|
except Exception as e:
|
|
return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
|
|
return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
|
|
|
|
+
|
|
|
|
+ @classmethod
|
|
|
|
+ def validateUserDevice(cls, user_id, request, request_dict, response):
|
|
|
|
+ """
|
|
|
|
+ 验证用户设备
|
|
|
|
+ @param user_id: 用户id
|
|
|
|
+ @param request: 请求
|
|
|
|
+ @param request_dict: 请求参数
|
|
|
|
+ @param response: 响应参数
|
|
|
|
+ @return: 成功 0 失败 173
|
|
|
|
+ """
|
|
|
|
+ uid = request_dict.get('uid')
|
|
|
|
+ serial_number = request_dict.get('serialNumber')
|
|
|
|
+ app_bundle_id = request_dict.get('appBundleId')
|
|
|
|
+ m_code = request_dict.get('mCode')
|
|
|
|
+
|
|
|
|
+ if not uid:
|
|
|
|
+ return response.json(444) # 错误代码:没有提供uid
|
|
|
|
+
|
|
|
|
+ try:
|
|
|
|
+ LOGGER.info(f'直播验证用户uid:{uid},user:{user_id},m_code:{m_code}')
|
|
|
|
+
|
|
|
|
+ redis = RedisObject(3)
|
|
|
|
+ # 构建Redis键
|
|
|
|
+ device_key = f"{RedisKeyConstant.BASIC_USER.value}{user_id}:UID:{uid}"
|
|
|
|
+
|
|
|
|
+ # 尝试从Redis中获取数据
|
|
|
|
+ device_info = redis.get_data(device_key)
|
|
|
|
+
|
|
|
|
+ # 检查缓存命中和UID匹配
|
|
|
|
+ if device_info == uid:
|
|
|
|
+ return response.json(0, uid) # 缓存命中返回 0
|
|
|
|
+
|
|
|
|
+ ip = CommonService.get_ip_address(request)
|
|
|
|
+ LOGGER.info(f'直播验证用户uid:{uid},ip:{ip},serial:{serial_number},app{app_bundle_id}')
|
|
|
|
+
|
|
|
|
+ # 从数据库查询设备版本信息
|
|
|
|
+ try:
|
|
|
|
+ device_qs = Device_Info.objects.filter(userID_id=user_id, UID=uid).values('UID')
|
|
|
|
+ if not device_qs.exists() or uid != device_qs.first().get('UID'):
|
|
|
|
+ LOGGER.error(f'验证用户uid错误,未找到设备信息 uid:{uid}')
|
|
|
|
+ return response.json(173) # 错误代码:未找到设备信息
|
|
|
|
+
|
|
|
|
+ # 将数据写入Redis,以便后续使用,设置TTL为48小时
|
|
|
|
+ redis.set_data(device_key, uid, 60 * 60 * 24 * 2)
|
|
|
|
+
|
|
|
|
+ return response.json(0, uid) # 返回设备信息
|
|
|
|
+
|
|
|
|
+ except Exception as db_exception:
|
|
|
|
+ LOGGER.error(f'数据库查询失败 user:{user_id}, uid:{uid}, error: {repr(db_exception)}')
|
|
|
|
+ return response.json(500, '数据库查询错误')
|
|
|
|
+
|
|
|
|
+ except Exception as e:
|
|
|
|
+ error_line = e.__traceback__.tb_lineno
|
|
|
|
+ LOGGER.error(f'验证用户uid异常 user:{user_id}, uid:{uid}, error_line:{error_line}, error_msg:{repr(e)}')
|
|
|
|
+ return response.json(500, f'error_line:{error_line}, error_msg:{repr(e)}')
|