Merge pull request !7165 from Admin/madaowen
This commit is contained in:
李鹏宇
2025-12-20 09:04:31 +00:00
committed by Gitee
2 changed files with 79 additions and 1 deletions
@@ -6,6 +6,7 @@ from datetime import datetime, date
import logging
from geopy.distance import geodesic
from datetime import timedelta
from ..until import base
import json
import requests
@@ -56,17 +57,22 @@ class AppletAttendance(Controller):
return json.dumps(return_data)
user_id = request.env['res.users'].sudo().browse(uid)
# 创建token
token = base.set_token(user_id.id, user_id.name)
employee_id = user_id.with_company(user_id.company_id.id).employee_id
applet_security_setting_ids = request.env['applet.security'].search(
[('employee_id', '=', employee_id.id)]).applet_security_setting_ids
access_list = [access.name for access in applet_security_setting_ids]
# 查询一下用户的手机号phone, 承租人关联的
data = {'name': employee_id.name, 'id': user_id.id, 'access': access_list, 'phone': employee_id.mobile_phone}
data = {'name': employee_id.name, 'id': user_id.id, 'access': access_list, 'phone': employee_id.mobile_phone, 'token': token}
_logger.info(f"接口人{employee_id.name}权限{access_list}__用户id: {user_id}________")
return_data = {'data': data, 'code': 200, 'message': ''}
return json.dumps(return_data)
# 验证token就在url下面加这个装饰器
# @base.authorize
@route('/yuthon/att/today', methods=['POST'], type='http', auth='none', cors='*', csrf=False)
def apple_yuthon_att_today(self, **kw):
"""
+72
View File
@@ -0,0 +1,72 @@
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