feat: 添加简化版认证API和配置文件
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 24m57s

This commit is contained in:
Xiaoxia AI
2026-06-20 11:29:46 +08:00
parent 9656588bf2
commit e819f6f89b
14 changed files with 2211 additions and 5 deletions
+5
View File
@@ -2,6 +2,7 @@ from fastapi import APIRouter
from app.api.routes.asset_libraries import router as asset_libraries_router
from app.api.routes.assets import router as assets_router
from app.api.routes.auth_simple import router as auth_router
from app.api.routes.classification_jobs import router as classification_jobs_router
from app.api.routes.generated_videos import router as generated_videos_router
from app.api.routes.generation_tasks import router as generation_tasks_router
@@ -15,6 +16,10 @@ api_router = APIRouter(prefix="/api/v1")
health_router = APIRouter()
health_router.include_router(health_check_router)
api_router.include_router(
auth_router,
tags=["认证"],
)
api_router.include_router(
projects_router,
prefix="/projects",
+6 -3
View File
@@ -2,6 +2,8 @@ from fastapi import APIRouter
from app.api.routes.asset_libraries import router as asset_libraries_router
from app.api.routes.assets import router as assets_router
# from app.api.routes.auth import router as auth_router # 暂时注释,待修复循环导入
from app.api.routes.auth_simple import router as auth_router # 临时简化版
from app.api.routes.classification_jobs import router as classification_jobs_router
from app.api.routes.health import router as health_router
from app.api.routes.ingest_jobs import router as ingest_jobs_router
@@ -10,10 +12,11 @@ from app.api.routes.projects import router as projects_router
from app.api.routes.upload import router as upload_router
api_router = APIRouter(prefix="/api/v1")
health_router = APIRouter()
health_router.include_router(health_router := health_router)
api_router.include_router(
auth_router,
tags=["认证"],
)
api_router.include_router(
projects_router,
prefix="/projects",
+157
View File
@@ -0,0 +1,157 @@
"""
简化版认证 API(使用 SQLAlchemy ORM
"""
from fastapi import APIRouter, HTTPException, status, Depends
from pydantic import BaseModel
from sqlalchemy.orm import Session
import hashlib
import secrets
from datetime import datetime
from app.dependencies import get_db_session
from packages.adapters.sqlalchemy_impl.models import UserModel
router = APIRouter(prefix="/auth", tags=["认证"])
# ==================== Models ====================
class RegisterRequest(BaseModel):
email: str
password: str
username: str
display_name: str
class RegisterResponse(BaseModel):
user_id: str
email: str
username: str
display_name: str
message: str
class LoginRequest(BaseModel):
email: str
password: str
class LoginResponse(BaseModel):
access_token: str
token_type: str = "bearer"
user_id: str
email: str
username: str
display_name: str
# ==================== Helper Functions ====================
def hash_password(password: str) -> str:
"""简单的密码哈希(仅用于测试)"""
return hashlib.sha256(password.encode()).hexdigest()
def generate_token() -> str:
"""生成访问令牌"""
return secrets.token_urlsafe(32)
# ==================== API Endpoints ====================
@router.post("/register", response_model=RegisterResponse, status_code=status.HTTP_201_CREATED)
async def register(request: RegisterRequest, db: Session = Depends(get_db_session)):
"""
用户注册(简化版)
"""
# 检查邮箱是否已存在
existing_user = db.query(UserModel).filter(UserModel.email == request.email).first()
if existing_user:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail="邮箱已被注册"
)
# 检查用户名是否已存在
if request.username:
existing_username = db.query(UserModel).filter(UserModel.username == request.username).first()
if existing_username:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail="用户名已被使用"
)
# 创建用户
user_id = f"user_{secrets.token_hex(8)}"
password_hash = hash_password(request.password)
new_user = UserModel(
id=user_id,
email=request.email,
username=request.username,
display_name=request.display_name,
password_hash=password_hash,
email_verified=False,
created_at=datetime.utcnow()
)
db.add(new_user)
db.commit()
db.refresh(new_user)
return RegisterResponse(
user_id=new_user.id,
email=new_user.email,
username=new_user.username or "",
display_name=new_user.display_name,
message="注册成功!"
)
@router.post("/login", response_model=LoginResponse)
async def login(request: LoginRequest, db: Session = Depends(get_db_session)):
"""
用户登录(简化版)
"""
# 查找用户
user = db.query(UserModel).filter(UserModel.email == request.email).first()
if not user:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="邮箱或密码错误"
)
# 验证密码
password_hash = hash_password(request.password)
if password_hash != user.password_hash:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="邮箱或密码错误"
)
# 生成访问令牌
access_token = generate_token()
return LoginResponse(
access_token=access_token,
user_id=user.id,
email=user.email,
username=user.username or "",
display_name=user.display_name
)
@router.get("/me")
async def get_current_user_info():
"""
获取当前用户信息(临时返回模拟数据)
"""
return {
"user_id": "test_user",
"email": "test@example.com",
"username": "testuser",
"display_name": "测试用户"
}