Streamlit(十七)- API 参考文档(十)- 身份认证与用户信息组件

文章目录


一、身份认证与用户信息组件

1. st.login:发起OIDC登录授权

功能说明

触发OpenID Connect(OIDC)第三方登录流程,跳转至谷歌、微软、Okta等身份服务商完成账号验证,登录成功后带回应用并保存用户身份Cookie,需提前在secrets.toml配置认证服务商参数。

核心参数

  • provider:服务商配置名,不传则读取默认[auth]配置;传入字符串则读取[auth.服务商名]独立配置。

前置依赖与限制

  1. 需要安装Authlib>=1.3.2依赖库
  2. 本地开发与线上部署必须同步修改redirect_uri回调地址
  3. 不支持内嵌应用(嵌入式iframe)登录
  4. 浏览器多标签页共享登录会话,关闭页面30天未登出Cookie自动过期

基础示例

python 复制代码
import streamlit as st

# 判断用户未登录,展示登录按钮
if not st.experimental_user.is_logged_in:
    if st.button("登录账号"):
        st.login()
else:
    st.write(f"欢迎你,{st.experimental_user.name}")

2. st.logout:用户登出操作

功能说明

清除浏览器本地身份Cookie、清空st.experimental_user用户信息,页面刷新回到首页,创建全新会话;不会退出第三方身份服务商的账号。

使用注意

同一浏览器多标签登录时,仅执行登出操作的当前会话会清除用户信息,其他已打开标签不受影响,刷新后才会同步登出状态。

基础示例

python 复制代码
import streamlit as st

if st.experimental_user.is_logged_in:
    if st.button("退出登录"):
        st.logout()

3. st.experimental_user:读取当前登录用户信息(文档简写st.user)

功能说明

只读字典式对象,解析OIDC身份令牌,获取当前登录用户的全部身份信息(邮箱、姓名、唯一ID、头像等),仅配置OIDC登录后生效。

核心属性

属性 作用
is_logged_in 布尔值,判断用户是否完成登录
name 用户昵称/全名
email 用户绑定邮箱
picture 用户头像链接

内置方法

  • .to_dict():将全部用户信息转为标准字典返回

基础示例

python 复制代码
import streamlit as st

if st.experimental_user.is_logged_in:
    # 打印完整用户信息
    st.json(st.experimental_user.to_dict())
    # 单独读取用户邮箱与姓名
    st.write("用户名:", st.experimental_user.name)
    st.write("登录邮箱:", st.experimental_user.email)
相关推荐
青少儿编程课堂17 分钟前
蓝桥杯青少组图形化 + 全国青少年信息素养大赛 + 电子学会Scratch考级:校园连连看解析
c++·python·算法·bfs·信息学竞赛
用户03321266636742 分钟前
如何使用 Python 将 JSON 转换为 Excel
python·excel
小小张说故事1 小时前
Python 的切片到底切了什么:拆开 slice 对象、负步长和 __getitem__
python
用户9562562542916 小时前
跟做:Firecrawl 单页转 Markdown 再丢进沙箱总结
python·api
威哥爱编程16 小时前
模拟面试智能体开发实战 02:回答等半分钟,谁还愿意练?把服务端和流式输出搭起来
python·agent·harmonyos
威哥爱编程16 小时前
模拟面试智能体开发实战 01:面试挂了都不知道挂在哪?用 Python 给自己造一个随叫随到的 AI 面试官
python·agent·harmonyos
2601_9679801117 小时前
Python行情API量化 02:顺序拉 20 要 2 秒?并发批量把时间压到 0.5 秒
python·api·限流·并发·量化
伞伞悦读17 小时前
【第81期】特征缩放怎么选:标准化、MinMax 与 Robust 的原理、泄漏对照和完整实验
人工智能·python·深度学习·机器学习
新*17 小时前
从一段 WebSocket 代码聊开:bytes 不是 zlib、binaryType 决定一切,15MB 大消息的零拷贝优化
javascript·python·websocket·性能优化·blob·zlib·arraybuffer
卷无止境19 小时前
mathmodel-figure-templates 以及两个上手案例
后端·python