Spaces:
Sleeping
Sleeping
testcoder-ui
commited on
Commit
·
979ef78
1
Parent(s):
3e98433
Fix OAuth login: improve username detection and fix Gradio 6.0 theme parameter
Browse files
app.py
CHANGED
|
@@ -213,23 +213,58 @@ def check_user_access(request: gr.Request) -> Tuple[str, bool]:
|
|
| 213 |
return "", False
|
| 214 |
|
| 215 |
# 获取登录用户名
|
| 216 |
-
# 在 Hugging Face Space
|
| 217 |
username = None
|
| 218 |
-
|
|
|
|
|
|
|
| 219 |
username = request.username
|
| 220 |
-
|
|
|
|
|
|
|
|
|
|
| 221 |
username = request.client.username
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 222 |
elif hasattr(request, 'headers'):
|
| 223 |
-
#
|
| 224 |
-
|
| 225 |
-
|
| 226 |
-
|
| 227 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 228 |
|
| 229 |
-
#
|
| 230 |
if not username:
|
| 231 |
-
# 在 HF Space 中,可以通过环境变量获取
|
| 232 |
username = os.getenv('HF_USERNAME', '')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 233 |
|
| 234 |
if not username:
|
| 235 |
return "", False
|
|
@@ -449,15 +484,16 @@ def submit_evaluation(
|
|
| 449 |
return f"❌ 提交评分失败: {str(e)}"
|
| 450 |
|
| 451 |
|
| 452 |
-
def get_user_info(request: gr.Request) -> str:
|
| 453 |
"""获取用户信息"""
|
|
|
|
| 454 |
if not request:
|
| 455 |
-
return "
|
| 456 |
|
| 457 |
username, has_access = check_user_access(request)
|
| 458 |
|
| 459 |
if not username:
|
| 460 |
-
return "❌
|
| 461 |
|
| 462 |
calls_today = dataset_manager.get_user_calls_today(username) if dataset_manager else 0
|
| 463 |
remaining = max(0, MAX_DAILY_CALLS - calls_today)
|
|
@@ -467,7 +503,7 @@ def get_user_info(request: gr.Request) -> str:
|
|
| 467 |
|
| 468 |
|
| 469 |
# 创建 Gradio 界面
|
| 470 |
-
with gr.Blocks(title="Video Model Evaluator"
|
| 471 |
gr.Markdown("""
|
| 472 |
# 🎬 视频生成模型评估系统
|
| 473 |
|
|
@@ -615,11 +651,13 @@ with gr.Blocks(title="Video Model Evaluator", theme=gr.themes.Soft()) as demo:
|
|
| 615 |
)
|
| 616 |
|
| 617 |
# 页面加载时更新用户信息
|
| 618 |
-
#
|
|
|
|
| 619 |
demo.load(
|
| 620 |
-
fn=
|
| 621 |
inputs=[],
|
| 622 |
-
outputs=[user_info]
|
|
|
|
| 623 |
)
|
| 624 |
|
| 625 |
# 添加说明
|
|
@@ -642,6 +680,7 @@ if __name__ == "__main__":
|
|
| 642 |
demo.launch(
|
| 643 |
server_name="0.0.0.0",
|
| 644 |
server_port=7860,
|
| 645 |
-
share=False
|
|
|
|
| 646 |
)
|
| 647 |
|
|
|
|
| 213 |
return "", False
|
| 214 |
|
| 215 |
# 获取登录用户名
|
| 216 |
+
# 在 Hugging Face Space 中,OAuth 登录后用户名可能在多个地方
|
| 217 |
username = None
|
| 218 |
+
|
| 219 |
+
# 方法1: 直接从 request.username 获取(Gradio 6.0)
|
| 220 |
+
if hasattr(request, 'username') and request.username:
|
| 221 |
username = request.username
|
| 222 |
+
logger.info(f"从 request.username 获取用户名: {username}")
|
| 223 |
+
|
| 224 |
+
# 方法2: 从 request.client.username 获取
|
| 225 |
+
elif hasattr(request, 'client') and hasattr(request.client, 'username') and request.client.username:
|
| 226 |
username = request.client.username
|
| 227 |
+
logger.info(f"从 request.client.username 获取用户名: {username}")
|
| 228 |
+
|
| 229 |
+
# 方法3: 从 cookies 中获取(HF OAuth 可能设置 cookie)
|
| 230 |
+
elif hasattr(request, 'cookies'):
|
| 231 |
+
# 检查常见的 HF cookie 名称
|
| 232 |
+
for cookie_name in ['hf_user', 'username', 'user', 'hf_username']:
|
| 233 |
+
if cookie_name in request.cookies:
|
| 234 |
+
username = request.cookies[cookie_name]
|
| 235 |
+
logger.info(f"从 cookie {cookie_name} 获取用户名: {username}")
|
| 236 |
+
break
|
| 237 |
+
|
| 238 |
+
# 方法4: 从 headers 中获取(HF OAuth 常用方式)
|
| 239 |
elif hasattr(request, 'headers'):
|
| 240 |
+
# HF OAuth 通常在 headers 中设置 X-User
|
| 241 |
+
header_value = None
|
| 242 |
+
for header_name in ['X-User', 'x-user', 'X-HF-User', 'x-hf-user', 'X-Username', 'x-username']:
|
| 243 |
+
if header_name in request.headers:
|
| 244 |
+
header_value = request.headers[header_name]
|
| 245 |
+
logger.info(f"从 header {header_name} 获取: {header_value}")
|
| 246 |
+
username = header_value
|
| 247 |
+
break
|
| 248 |
+
|
| 249 |
+
# 如果没有找到,尝试从 authorization header 解析
|
| 250 |
+
if not username and 'authorization' in request.headers:
|
| 251 |
+
auth_header = request.headers.get('authorization', '')
|
| 252 |
+
logger.info(f"找到 authorization header: {auth_header[:50]}...")
|
| 253 |
+
# 这里可以解析 JWT token 获取用户名(如果需要)
|
| 254 |
|
| 255 |
+
# 方法5: 从环境变量获取(如果 Space 设置了)
|
| 256 |
if not username:
|
|
|
|
| 257 |
username = os.getenv('HF_USERNAME', '')
|
| 258 |
+
if username:
|
| 259 |
+
logger.info(f"从环境变量 HF_USERNAME 获取用户名: {username}")
|
| 260 |
+
|
| 261 |
+
# 调试:打印 request 对象的所有属性
|
| 262 |
+
if not username:
|
| 263 |
+
logger.warning("无法获取用户名,request 对象属性:")
|
| 264 |
+
if hasattr(request, '__dict__'):
|
| 265 |
+
logger.warning(f"request.__dict__: {request.__dict__}")
|
| 266 |
+
logger.warning(f"request 类型: {type(request)}")
|
| 267 |
+
logger.warning(f"request dir: {[attr for attr in dir(request) if not attr.startswith('_')]}")
|
| 268 |
|
| 269 |
if not username:
|
| 270 |
return "", False
|
|
|
|
| 484 |
return f"❌ 提交评分失败: {str(e)}"
|
| 485 |
|
| 486 |
|
| 487 |
+
def get_user_info(request: gr.Request = None) -> str:
|
| 488 |
"""获取用户信息"""
|
| 489 |
+
# 如果没有 request,返回提示
|
| 490 |
if not request:
|
| 491 |
+
return "⏳ 正在检查登录状态..."
|
| 492 |
|
| 493 |
username, has_access = check_user_access(request)
|
| 494 |
|
| 495 |
if not username:
|
| 496 |
+
return "❌ 请先登录 Hugging Face 账户\n\n提示:点击右上角的 'Login with Hugging Face' 按钮登录"
|
| 497 |
|
| 498 |
calls_today = dataset_manager.get_user_calls_today(username) if dataset_manager else 0
|
| 499 |
remaining = max(0, MAX_DAILY_CALLS - calls_today)
|
|
|
|
| 503 |
|
| 504 |
|
| 505 |
# 创建 Gradio 界面
|
| 506 |
+
with gr.Blocks(title="Video Model Evaluator") as demo:
|
| 507 |
gr.Markdown("""
|
| 508 |
# 🎬 视频生成模型评估系统
|
| 509 |
|
|
|
|
| 651 |
)
|
| 652 |
|
| 653 |
# 页面加载时更新用户信息
|
| 654 |
+
# 注意:demo.load 可能无法获取 request,所以先显示提示
|
| 655 |
+
# 用户操作时会自动更新(通过 generate_btn 点击事件)
|
| 656 |
demo.load(
|
| 657 |
+
fn=lambda: "⏳ 请先登录 Hugging Face 账户",
|
| 658 |
inputs=[],
|
| 659 |
+
outputs=[user_info],
|
| 660 |
+
show_progress=False
|
| 661 |
)
|
| 662 |
|
| 663 |
# 添加说明
|
|
|
|
| 680 |
demo.launch(
|
| 681 |
server_name="0.0.0.0",
|
| 682 |
server_port=7860,
|
| 683 |
+
share=False,
|
| 684 |
+
theme=gr.themes.Soft() # Gradio 6.0: theme 参数放在 launch() 中
|
| 685 |
)
|
| 686 |
|