You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gradio认证后如何获取并保留会话中的用户名?

在Gradio会话中保留并获取登录用户名的解决方案

下面提供两种可行的方案,均能在用户认证成功后,在会话周期内持久保存并获取用户名:

方案一:使用gr.State组件(推荐)

gr.State是Gradio专门用于管理会话级状态的组件,每个用户会话拥有独立的State实例,不会产生跨用户数据干扰。

修改后代码示例

import gradio as gr

def login(email, password):
    """自定义认证逻辑"""
    # 此处替换为你的实际认证逻辑(比如校验数据库账号)
    return True, email

def handle_submit(text, current_username):
    """业务处理函数,可直接使用当前登录用户名"""
    return f"用户【{current_username}】提交的内容:{text}"

with gr.Blocks(title="My App") as app:
    # 创建State组件存储当前登录用户的用户名,初始值为None
    username_state = gr.State(value=None)

    # 登录成功后,将返回的用户名存入State组件
    def update_username(username):
        return username

    # 绑定认证成功事件,更新State值
    app.auth_success(update_username, inputs=None, outputs=username_state)

    # 应用布局
    with gr.Row():
        input_text = gr.Textbox(label="输入文本", placeholder="Hello world")
        output_text = gr.Textbox(label="处理结果")
        submit_btn = gr.Button("提交")

        # 提交按钮触发业务函数,传入文本和用户名State
        submit_btn.click(handle_submit, inputs=[input_text, username_state], outputs=output_text)

if __name__ == "__main__":
    app.launch(server_name="0.0.0.0", auth=login)

关键说明

  • app.auth_success()会在用户认证通过后自动触发,将登录函数返回的用户名传递给update_username,从而更新username_state。
  • 后续任何需要使用用户名的业务函数,只需将username_state作为参数传入,即可获取当前会话的登录用户信息。

方案二:直接操作会话状态字典

通过gr.get_session_state()获取当前用户的会话状态字典,手动存入和读取用户名。

修改后代码示例

import gradio as gr

def login(email, password):
    """自定义认证逻辑"""
    # 此处替换为你的实际认证逻辑
    return True, email

def handle_submit(text):
    """从会话状态中读取用户名并处理业务"""
    session_state = gr.get_session_state()
    current_username = session_state.get("username", "未登录用户")
    return f"用户【{current_username}】提交的内容:{text}"

with gr.Blocks(title="My App") as app:
    # 应用布局
    with gr.Row():
        input_text = gr.Textbox(label="输入文本", placeholder="Hello world")
        output_text = gr.Textbox(label="处理结果")
        submit_btn = gr.Button("提交")
        submit_btn.click(handle_submit, inputs=input_text, outputs=output_text)

    # 认证成功后,将用户名存入会话状态
    @app.auth_success
    def on_auth_success(username):
        session_state = gr.get_session_state()
        session_state["username"] = username

if __name__ == "__main__":
    app.launch(server_name="0.0.0.0", auth=login)

关键说明

  • gr.get_session_state()返回当前用户会话的专属状态字典,存入的键值仅对当前会话可见。
  • 通过@app.auth_success装饰器绑定的函数,会在认证成功后自动执行,完成用户名的存储。

内容的提问来源于stack exchange,提问作者Alexis.Rolland

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 01:10:04