v0.1测试

This commit is contained in:
2026-04-07 17:07:13 +08:00
parent 593973f598
commit 6b1b586fe3
80 changed files with 9073 additions and 32 deletions

View File

@@ -0,0 +1,86 @@
# ===========================================
# 班级操行分管理系统 - 后端服务
#
# 开发者: Canglan
# 联系方式: admin@sea-studio.top
# 版权归属: Sea Network Technology Studio
# 许可证: MIT License
#
# 版权所有 © Sea Network Technology Studio
# ===========================================
from jose import jwt, JWTError
from datetime import datetime, timedelta
from typing import Optional, Dict, Any
from config import settings
from utils.logger import get_logger
logger = get_logger(__name__)
class JWTHandler:
"""JWT Token处理类"""
@staticmethod
def create_token(user_id: int, username: str, user_type: str, student_id: int = None, role: str = None) -> str:
"""
创建JWT Token
"""
payload = {
'user_id': user_id,
'username': username,
'user_type': user_type,
'student_id': student_id,
'role': role,
'exp': datetime.utcnow() + timedelta(minutes=settings.JWT_EXPIRE_MINUTES),
'iat': datetime.utcnow(),
'iss': settings.APP_NAME
}
token = jwt.encode(
payload,
settings.JWT_SECRET_KEY,
algorithm=settings.JWT_ALGORITHM
)
return token
@staticmethod
def verify_token(token: str) -> Optional[Dict[str, Any]]:
"""
验证JWT Token
返回: 解码后的payload失败返回None
"""
try:
payload = jwt.decode(
token,
settings.JWT_SECRET_KEY,
algorithms=[settings.JWT_ALGORITHM],
options={'verify_exp': True}
)
return payload
except jwt.ExpiredSignatureError:
logger.warning("JWT Token已过期")
return None
except jwt.JWTError as e:
logger.warning(f"JWT Token验证失败: {e}")
return None
@staticmethod
def get_user_id_from_token(token: str) -> Optional[int]:
"""从Token中获取用户ID"""
payload = JWTHandler.verify_token(token)
if payload:
return payload.get('user_id')
return None
@staticmethod
def get_user_type_from_token(token: str) -> Optional[str]:
"""从Token中获取用户类型"""
payload = JWTHandler.verify_token(token)
if payload:
return payload.get('user_type')
return None
jwt_handler = JWTHandler()