Files
gzth/yuthon_hr_attendance/until/base.py
T
2025-12-20 17:02:11 +08:00

73 lines
1.8 KiB
Python

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