| import os |
| import gradio as gr |
| from huggingface_hub import whoami |
|
|
| WHITELIST = set(filter(None, os.environ.get("WHITELIST", "").split(","))) |
|
|
| def process_user_data(oauth_token: gr.OAuthToken | None): |
| """页面加载时在后台打印用户信息""" |
| if oauth_token is None or not oauth_token.token: |
| return |
| try: |
| user_info = whoami(token=oauth_token.token) |
| username = user_info.get("name", "未知用户") |
| orgs = user_info.get("orgs", []) |
| org_names = [org["name"] for org in orgs] |
| org_str = ", ".join(org_names) if org_names else "个人用户" |
| in_whitelist = username in WHITELIST |
| print("="*30) |
| print(f"📡 收到用户信息:") |
| print(f"👤 用户名: {username}") |
| print(f"🏢 组织: {org_str}") |
| print(f"✅ 白名单: {in_whitelist}") |
| print("="*30) |
| except Exception as e: |
| print(f"❌ 认证失败日志: {e}") |
|
|
| def handle_submit(oauth_token: gr.OAuthToken | None): |
| """ |
| 提交按钮逻辑: |
| - 已登录:运行打印逻辑1111,不发跳转信号。 |
| - 未登录:发送 TRIGGER 信号引导跳转。 |
| """ |
| if oauth_token is not None and oauth_token.token: |
| try: |
| user_info = whoami(token=oauth_token.token) |
| username = user_info.get("name", "未知用户") |
| orgs = user_info.get("orgs", []) |
| org_names = [org["name"] for org in orgs] |
| org_str = ", ".join(org_names) if org_names else "个人用户" |
| in_whitelist = username in WHITELIST |
| print("="*30) |
| print(f"📡 收到用户信息:") |
| print(f"👤 用户名: {username}") |
| print(f"🏢 组织: {org_str}") |
| print(f"✅ 白名单: {in_whitelist}") |
| print("="*30) |
| return "SUCCESS" |
| except Exception as e: |
| print(f"❌ 认证失败日志:11 {e}") |
| return "TRIGGER" |
| return "TRIGGER" |
|
|
| css = """ |
| #real_login_btn { position: absolute; opacity: 0; pointer-events: none; height: 0; width: 0; } |
| """ |
|
|
| with gr.Blocks(css=css) as demo: |
| |
| login_btn = gr.LoginButton(elem_id="real_login_btn") |
| |
| |
| signal_box = gr.Textbox(visible=False) |
| |
| gr.Markdown("# 🚀 业务系统") |
|
|
| with gr.Row(): |
| submit_btn = gr.Button("点击提交业务", variant="primary") |
| logout_btn = gr.Button("退出登录") |
|
|
| |
| demo.load(fn=process_user_data, inputs=None, outputs=None) |
|
|
| |
| submit_btn.click( |
| fn=handle_submit, |
| inputs=[], |
| outputs=signal_box, |
| ).then( |
| None, |
| inputs=[signal_box], |
| outputs=None, |
| js=""" |
| (sig) => { |
| if (sig === "TRIGGER") { |
| const btn = document.getElementById("real_login_btn"); |
| if (btn) { |
| const actualBtn = btn.querySelector('button') || btn; |
| actualBtn.click(); |
| } |
| } else if (sig === "SUCCESS") { |
| alert("已在后台处理用户信息!"); |
| } |
| } |
| """ |
| ) |
|
|
| |
| logout_btn.click( |
| None, None, None, |
| js="() => { window.location.href = window.location.pathname; }" |
| ) |
|
|
| demo.launch() |