Auth / app.py
wenjiao
1
bf1a20e
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("退出登录")
# --- 逻辑 A: 页面加载时(如授权跳回)在后台打印 ---
demo.load(fn=process_user_data, inputs=None, outputs=None)
# --- 逻辑 B: 提交按钮逻辑 ---
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("已在后台处理用户信息!");
}
}
"""
)
# --- 逻辑 C: 登出 ---
logout_btn.click(
None, None, None,
js="() => { window.location.href = window.location.pathname; }"
)
demo.launch()