# coding:utf-8 # author:ila import base64, copy from django.http import JsonResponse from django.apps import apps from util.codes import * from util import message as mes class Auth(object): def authenticate(self, model, req_dict): """ 用户登录,登录成功返回token;登录失败返回失败原因 :param username:账号 :param password:密码 :return: json """ msg = {'code': normal_code, 'msg': mes.normal_code, 'data': {}} tablename = model.__tablename__ encode_dict = {"tablename": tablename, "params": req_dict} encode_str = base64.b64encode(str(encode_dict).encode("utf-8")) msg['data']["id"] = req_dict.get("id") msg["id"] = req_dict.get("id") msg['token'] = encode_str.decode('utf-8') return JsonResponse(msg) def identify(self, request): """ 用户鉴权 :param request:本次请求对象 :return: list """ msg = {'code': normal_code, 'msg': mes.normal_code, 'data': {}} # django的header被处理过了 token = request.META.get('HTTP_TOKEN') if token and token !="null": auth_token = copy.deepcopy(token) decode_str = base64.b64decode(auth_token).decode("utf8") decode_str=decode_str.replace('"null"','""').replace('null','""') decode_dict = eval(decode_str) tablename2 = decode_dict.get("tablename") params2 = decode_dict.get("params",{}) datas=None allModels = apps.get_app_config('main').get_models() for model in allModels: if model.__tablename__ == tablename2: datas = model.getbyparams(model, model, params2) if not datas: msg['code'] = username_error_code msg['msg'] = '找不到该用户信息' result = msg else: request.session['tablename'] = tablename2 request.session['params'] = params2 msg['msg'] = '身份验证通过。' result = msg else: msg['code'] = 401 msg['msg'] = 'headers未包含认证信息。' result = msg return result