fix:修复提示词工坊公开接口验证逻辑 4

This commit is contained in:
xiamuceer-j
2026-01-27 15:07:11 +08:00
parent be0bb3c928
commit 692dab6912
4 changed files with 256 additions and 13 deletions
+5 -3
View File
@@ -258,8 +258,10 @@ async def _get_items_local(
@router.get("/items/{item_id}")
async def get_item(item_id: str, db: AsyncSession = Depends(get_db)):
async def get_item(item_id: str, request: Request, db: AsyncSession = Depends(get_db)):
"""获取单个提示词详情"""
user_identifier = get_optional_user_identifier(request)
if is_workshop_server():
result = await db.execute(
select(PromptWorkshopItem).where(
@@ -273,7 +275,7 @@ async def get_item(item_id: str, db: AsyncSession = Depends(get_db)):
return {"success": True, "data": _item_to_dict(item)}
else:
try:
return await workshop_client.get_item(item_id)
return await workshop_client.get_item(item_id, user_identifier=user_identifier)
except WorkshopClientError as e:
raise HTTPException(status_code=503, detail=str(e))
@@ -305,7 +307,7 @@ async def import_item(
else:
# 从云端获取
try:
result = await workshop_client.get_item(item_id)
result = await workshop_client.get_item(item_id, user_identifier=user_identifier)
item_data = result.get("data", result)
# 通知云端增加下载计数
+22 -5
View File
@@ -128,17 +128,34 @@ config_logger.debug(f"AI提供商: {settings.default_ai_provider}")
# ==================== 提示词工坊实例标识 ====================
def get_or_create_instance_id() -> str:
"""获取或创建实例唯一标识"""
"""获取或创建实例唯一标识
- Server 模式:固定使用 "server" 作为标识,确保与所有 Client 实例区分
- Client 模式:从 .instance_id 文件读取或自动生成唯一标识
"""
# Server 模式使用固定标识
if settings.WORKSHOP_MODE.lower() == "server":
config_logger.info("Server 模式:使用固定实例标识 'server'")
return "server"
# Client 模式:从文件读取或生成
instance_file = PROJECT_ROOT / ".instance_id"
if instance_file.exists():
with open(instance_file, 'r') as f:
return f.read().strip()
else:
instance_id = str(uuid.uuid4())[:12]
instance_id = f.read().strip()
if instance_id and instance_id != "server": # 确保不与 server 冲突
return instance_id
# 生成新的实例ID
instance_id = str(uuid.uuid4())[:12]
try:
with open(instance_file, 'w') as f:
f.write(instance_id)
config_logger.info(f"生成新的实例标识: {instance_id}")
return instance_id
except Exception as e:
config_logger.warning(f"无法保存实例标识到文件: {e}")
return instance_id
INSTANCE_ID = get_or_create_instance_id()
+4 -3
View File
@@ -99,9 +99,9 @@ class WorkshopClient:
user_identifier=user_identifier
)
async def get_item(self, item_id: str) -> Dict:
async def get_item(self, item_id: str, user_identifier: Optional[str] = None) -> Dict:
"""获取单个提示词详情"""
return await self._request("GET", f"/items/{item_id}")
return await self._request("GET", f"/items/{item_id}", user_identifier=user_identifier)
async def record_download(self, item_id: str, user_identifier: str) -> Dict:
"""记录下载"""
@@ -111,7 +111,8 @@ class WorkshopClient:
json={
"instance_id": INSTANCE_ID,
"user_identifier": user_identifier
}
},
user_identifier=user_identifier
)
async def toggle_like(self, item_id: str, user_identifier: str) -> Dict: