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
相关产品推荐
相关产品推荐

