streamlit_supabase_auth_ui
适用于无缝 Streamlit 应用程序的无缝 Supabase 身份验证

目的与灵感
Streamlit 是一个流行的 Python 后端到前端应用程序开发框架,多年来已经开发出多种解决方案来解决 Streamlit 应用程序的用户身份验证和管理问题。
其中最受欢迎的是 streamlit-authenticator 和 streamlit_login_auth_ui,尽管它们提供了多种高级功能和动态用户界面,但缺乏可靠的后端、以数据库为中心的用户管理(通常通过本地文件进行)。
我们决定基于 Gauri Prabhakar 的登录界面构建一个新的身份验证用户界面,它结合了 Supabase PostgreSQL 数据库的强大功能和 Streamlit 的无缝前端组件,并将其连接到 Courier 提供的电子邮件通知服务。
该用户界面具有登录、用户注册、密码重置和“忘记密码”功能,以及注销功能。
那么,让我们开始吧!🚀
第三方服务
1. Supabase
我们需要一个 Supabase 账户来构建一个项目,获取其 URL 和 ANON 密钥,并创建一个 `user_authentication` 数据库,该数据库将把我们的用户界面连接到后端、以数据库为中心的用户管理。
为此,我们:
- 创建一个 Supabase 账户
- 前往 我们的仪表板
- 创建一个新项目
- 前往 `Project Settings > API` 并复制 `Project URL` 下的 `URL` 和 `Project API Keys` 下的 `anon public` 密钥
- 将 URL 复制到 `.streamlit/secrets.toml` 中的 `supa_url`,将 ANON 密钥复制到 `supa_key`
- 在 Supabase 上打开 SQL 编辑器并执行以下命令
CREATE TABLE user_authentication (
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
username VARCHAR(255) DEFAULT NULL,
password VARCHAR(255) DEFAULT NULL,
email VARCHAR(255) DEFAULT NULL,
name VARCHAR(255) DEFAULT NULL,
created_at TIMESTAMP DEFAULT NOW()
);
2. Courier
我们主要出于两个原因发送电子邮件通知:
- 欢迎新用户注册
- 在他们想要更改旧密码/丢失密码时发送重置密码
为此,我们使用前面提到的 Courier,因此我们需要:
- 注册 Courier
- 创建一个新工作区
- 启用电子邮件服务提供商。最简单和最便宜的选择是 Gmail:您只需指定您想要激活服务的 Gmail 账户,该账户也将是发送所有电子邮件的账户。
- 从 `Settings > API Keys` 检索授权令牌
- 复制授权令牌并将其放在 `.streamlit/secrets.toml` 中的 `courier_auth_token` 下
创建您的应用程序
1. 从源代码构建
现在我们想要创建我们的 Streamlit 应用程序,并带有 Supabase 身份验证和用户管理功能。为此,我们:
- 克隆此仓库并进入其中
git clone https://github.com/AstraBert/streamlit_supabase_auth_ui.git
cd streamlit_supabase_auth_ui
- 创建并激活 Python 虚拟环境
python3 -m venv streamlit-app
source streamlit-app/bin/activate
- 安装所有必要的依赖项
python3 -m pip install -r requirements.txt
- 用我们预先获取的 Supabase 项目 URL(`supa_url`)、Supabase 项目 ANON 密钥(`supa_key`)和 Courier 身份验证令牌(`courier_auth_token`)修改 `.streamlit/secrets.toml`
- 运行应用程序
python3 -m streamlit run app.py
您显然可以随心所欲地自定义 Streamlit 应用程序,您只需集成此部分代码即可使基于 Supabase 的身份验证正常工作
import streamlit as st
from .streamlit_supabase_auth_ui.widgets import __login__
__login__obj = __login__(auth_token = st.secrets["courier_auth_token"],
company_name = "YOUR-ORG-NAME",
width = 200, height = 250,
logout_button_name = 'Logout', hide_menu_bool = False,
hide_footer_bool = False,
lottie_url = 'https://assets2.lottiefiles.com/packages/lf20_jcikwtux.json')
LOGGED_IN= __login__obj.build_login_ui()
if LOGGED_IN == True:
### Your Streamlit app here!
2. 获取 PyPi 包
我们还将 `streamlit-supabase-auth-ui` 制成了一个可在 PyPi 上获取的 Python 包,您可以在这里找到它。
要获取它,只需运行
python3 -m pip install streamlit-supabase-auth-ui
安装过程将负责安装所有必要的依赖项✅
然后您只需在代码中导入该包即可
import streamlit as st
from streamlit_supabase_auth_ui.widgets import __login__
__login__obj = __login__(auth_token = st.secrets["courier_auth_token"],
company_name = "YOUR-ORG-NAME",
width = 200, height = 250,
logout_button_name = 'Logout', hide_menu_bool = False,
hide_footer_bool = False,
lottie_url = 'https://assets2.lottiefiles.com/packages/lf20_jcikwtux.json')
在线演示
在 HuggingFace Spaces 上找到在线演示。