This commit is contained in:
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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": "测试用户"
|
||||
}
|
||||
Reference in New Issue
Block a user