import datetime import functools import hashlib import jwt import logging from odoo.http import request def logutils(): # 创建日志的记录等级 logger = logging.getLogger(__name__) logger.setLevel(logging.INFO) return logger _logging = logutils() def set_token(user_id, user_name): '''创建jwt token''' payload = { # 过期时间 'exp': datetime.datetime.utcnow() + datetime.timedelta(days=1), # token签发者 'iss': 'system', # token创建时间 'iat': datetime.datetime.utcnow(), 'data': { 'id': user_id, 'name': user_name, } } key = hashlib.md5('yuthon'.encode('utf-8')).hexdigest() token = jwt.encode(payload=payload, key=key, algorithm="HS256") return token def check_token(token): '''验证jwt token''' try: key = hashlib.md5('yuthon'.encode('utf-8')).hexdigest() payload = jwt.decode(jwt=token, key=key, algorithms="HS256") data = payload.get('data') if data and data.get('id'): return payload except Exception as e: _logging.error(str(e)) return None # token登录验证装饰器 def authorize(func): @functools.wraps(func) def wrapper(*args, **kw): token = request.httprequest.headers.get('Authorization') if not token: raise ValueError('用户登录异常') payload = check_token(token=token) if not payload: raise ValueError('用户登录异常') data = payload.get('data') user = request.env.user.search([('id', '=', data.get('id'))]) if user and user.login == data.get('name'): request.env.uid = user.id request.env.user = user else: raise ValueError('用户登录异常') return func(*args, **kw) return wrapper