rkui2api / auth.py
1v1's picture
Upload 9 files
19adbbb verified
# auth.py
# 身份验证中间件,处理API请求的认证
from fastapi import Request, HTTPException
from functools import wraps
from config import AuthConfig
def verify_token(request: Request) -> bool:
"""验证请求中的Bearer Token
Args:
request: FastAPI请求对象
Returns:
bool: 令牌是否有效
"""
auth_header = request.headers.get('Authorization')
return AuthConfig.validate_token(auth_header)
def require_auth(func):
"""要求认证的装饰器
用法:
@require_auth
async def protected_route():
...
"""
@wraps(func)
async def wrapper(*args, **kwargs):
request = kwargs.get('request')
if not request:
for arg in args:
if isinstance(arg, Request):
request = arg
break
if not request:
raise HTTPException(status_code=500, detail="Internal server error")
if not verify_token(request):
raise HTTPException(
status_code=401,
detail="Invalid or missing authentication token",
headers={"WWW-Authenticate": "Bearer"}
)
return await func(*args, **kwargs)
return wrapper