用户验证:Streamlit应用程序与Streamlit-Authenticator

写在前面
在数字化时代,数据安全和用户隐私越来越受到重视。对于使用Streamlit构建的Web应用程序来说,确保用户的安全身份验证是至关重要的。而Streamlit-Authenticator,作为一个专门为Streamlit应用程序设计的身份验证库,正成为保障用户数据安全的新选择。
一、Streamlit+Streamlit-Authenticator介绍
1.1 Streamlit
Streamlit是一种开源的Python库,它允许开发者快速构建数据科学和机器学习Web应用程序。然而,随着应用程序的普及和用户数量的增加,如何确保只有经过身份验证的用户才能访问应用程序变得尤为重要。这就需要一个强大而可靠的身份验证机制。
1.2 Streamlit-Authenticator
Streamlit-Authenticator应运而生,它提供了一个简单而高效的方式来为Streamlit应用程序添加身份验证功能。通过集成Streamlit-Authenticator,开发者可以轻松地添加用户登录、注册和权限管理等功能,从而保护应用程序中的数据安全和用户隐私。
使用Streamlit-Authenticator进行用户身份验证的过程非常简单。首先,开发者需要在Streamlit应用程序中安装并导入Streamlit-Authenticator库。然后,通过配置身份验证参数,如用户名、密码或第三方身份验证提供商,来定义身份验证的方式。
一旦配置完成,用户在访问Streamlit应用程序时将被要求进行身份验证。用户可以通过输入用户名和密码、使用第三方身份验证服务或进行其他验证步骤来完成身份验证过程。一旦验证成功,用户将获得访问应用程序的权限,并能够享受到其中的各种功能和数据。
1.3 Authenticator 优点
Streamlit-Authenticator不仅提供了基本的身份验证功能,还具备一些高级特性,如多用户权限管理和会话管理。开发者可以根据需要为不同的用户设置不同的权限级别,以控制他们对应用程序的访问和操作。同时,Streamlit-Authenticator还能够管理用户的会话状态,确保用户在登录后能够保持持续的身份验证状态,提高用户体验。
除了安全性之外,Streamlit-Authenticator还注重用户体验的优化。它提供了友好的用户界面和流畅的交互体验,使用户能够轻松完成身份验证过程,而无需复杂的操作或等待时间。
总的来说,Streamlit-Authenticator为Streamlit应用程序提供了强大而可靠的用户身份验证功能。它不仅能够保护应用程序中的数据安全和用户隐私,还能够提升用户体验和增强应用程序的可靠性。随着数字化时代的到来,Streamlit-Authenticator将成为Streamlit应用程序不可或缺的一部分,为开发者提供更加安全、可靠和高效的Web应用程序构建体验。
二、使用示例
在这个示例中,我将展示如何使用Streamlit和Streamlit-Authenticator来构建一个带有基本身份验证功能的Web应用程序。
2.1 安装
首先,确保你已经安装了Streamlit和Streamlit-Authenticator。你可以使用pip来安装它们:
pip install streamlit
pip install streamlit-authenticator
2.2 创建脚本
接下来,创建一个Python脚本(例如app.py),并编写以下代码:
import streamlit as st
from streamlit_authenticator import StAuthenticator, UsernamePasswordHasher # 初始化一个Streamlit应用
st.set_page_config( page_title="Streamlit App with Authentication", page_icon="::favicon::", layout="wide", initial_sidebar_state="expanded",
) # 创建一个哈希器对象,用于存储和验证用户名和密码
hasher = UsernamePasswordHasher() # 假设这是你的用户名和密码,实际使用中应该通过更安全的方式存储和验证
USERNAME = "admin"
PASSWORD = hasher.hash_password("my_secure_password") # 创建认证器对象
authenticator = StAuthenticator(hasher) # 检查用户是否已登录
if not authenticator.is_user_authenticated(): # 如果用户未登录,则显示登录表单 authenticator.login(USERNAME, PASSWORD) # 如果用户已登录,则显示应用程序内容
else: # 在这里编写你的应用程序逻辑 st.title("Welcome to the Secure Streamlit App!") st.write("You are now authenticated and can access the app.") # 示例:显示一些数据或进行其他操作 st.write("Here is some data:") data = {"Name": ["Alice", "Bob", "Charlie"], "Age": [25, 30, 35]} st.table(data) # 提供一个注销按钮 if st.button("Logout"): authenticator.logout() st.stop() # 运行Streamlit应用
if __name__ == "__main__": st.run_script("app.py")
2.3 代码讲解
在这个示例中,首先导入了必要的库,并设置了Streamlit应用的页面配置。
然后,创建了一个
UsernamePasswordHasher对象来管理用户名和密码的哈希存储。接下来,定义了用户名和密码(在实际应用中,这些应该通过更安全的方式存储,比如环境变量或加密的配置文件)。
然后,创建了一个
StAuthenticator对象,并使用is_user_authenticated()方法检查用户是否已经登录。
如果用户未登录,使用
authenticator.login(USERNAME, PASSWORD)显示一个登录表单,用户需要输入正确的用户名和密码才能继续。如果用户已登录,我们显示应用程序的内容,例如一些数据或一个表格。还提供了一个注销按钮,用户可以点击它来注销并停止应用。
2.4 运行代码
最后,我们使用下面命令来运行Streamlit应用。
st.run_script("app.py")
2.5 总结
这个示例仅用于演示目的,并没有包含任何错误处理或更复杂的身份验证逻辑。
在实际应用中,你可能需要处理各种边缘情况,并使用更安全的方式来管理和验证用户的身份。
此外,你还可以考虑集成更复杂的权限管理系统,以控制不同用户对应用程序的不同部分的访问权限。
相关文章:
用户验证:Streamlit应用程序与Streamlit-Authenticator
写在前面 在数字化时代,数据安全和用户隐私越来越受到重视。对于使用Streamlit构建的Web应用程序来说,确保用户的安全身份验证是至关重要的。而Streamlit-Authenticator,作为一个专门为Streamlit应用程序设计的身份验证库,正成为保…...
风丘EV能量流测试解决方案 提高电动汽车续航能力
电动汽车(EV)近些年发展迅猛,已被汽车业内普遍认为是未来汽车发展的新方向,但现如今电动汽车仍然存在一些短板,导致其还无法替代传统燃油车。对此,首先想到的肯定就是电动车的续航问题。其实解决电动车续航…...
【Python】输出一个 Python 项目下需要哪些第三方包
方法一 pycharm 方法二 要分析一个 Python 项目下需要哪些第三方包并生成 requirements.txt 文件,你可以使用 pipreqs 工具。以下是具体的步骤: 首先,确保你已经安装了 pipreqs 工具。如果未安装,可以使用以下命令进行安装&a…...
程序员35岁会失业吗?【来自主流AI的回答】
程序员35岁会失业吗? 35岁被认为是程序员职业生涯的分水岭,许多程序员开始担忧自己的职业发展是否会受到年龄的限制。有人担心随着年龄的增长,技术更新换代的速度会使得资深程序员难以跟上;而另一些人则认为,丰富的经…...
每天30分钟python(第一天)
1.input 1.规则 input输入的是字符串 2.print打印规则: 整数不能与文字一起打印,但是字符串可以,所以将文字转换为字符串即可 print("小明今年"str(5)"岁了") 代码实践: 错误代码: # 实现 …...
gitlab简单介绍及安装使用
gitlab 概述 什么是 gitlab GitLab 是一个基于 Web 的 Git 仓库管理工具,提供了代码托管、版本控制、协作开发、持续集成和部署等功能。它类似于 GitHub,但是 GitLab 可以在私有服务器上部署,也可以使用 GitLab 提供的托管服务。GitLab 支持…...
NetCore itext7 创建、编辑PDF插入表格、图片、文字(三)
NetCore 创建、编辑PDF插入表格、图片、文字 NetCore 创建、编辑PDF插入表格、图片、文字(二) NetCore 创建、编辑PDF插入表格、图片、文字(三) 直接上代码 nuget引入 itext7 using System; using System.IO;using iText.IO.Image; using iText.Kernel.Colors; // 导入颜色…...
数据结构奇妙旅程之深入解析冒泡排序
冒泡排序(Bubble Sort)是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成…...
解决 sudo apt update E: The repository is not signed.
一段时间没有用ubuntu系统,出现了很多这样的报错 解决方法 cd /etc/apt/sources.list.d ls然后把报错的项目从里面移除,例如 sudo rm cudnn-local-ubuntu2004-8.7.0.84.list全部移除后,再sudo apt-get update就能成功...
SCT2A26STER5.5V-100V Vin,4A峰值限流,高效异步降压DCDC转换器,替代LM5012、LM5013、LM5017、LM5164
• 5.5V-100V 输入电压 • 最大输出电压:30V • 2A 连续输出电流 • 4A峰值电流限制 • 1.2V 1% 反馈电压 • 集成500mΩ 高侧功率 MOSFETs • 140uA静态电流 • 恒定导通时间控制模式 • 4ms 内置软启动时间 • 300KHz 固定开关频率 • 可编程输入电压欠…...
前端学习资源整合
整合优质前端学习资源和文章,不定期更新。 JavaScript 现代 JavaScript 教程 官网:https://zh.javascript.info/GitHub:https://github.com/javascript-tutorial/zh.javascript.info 优秀的JS代码规范 官方英文版:https://gi…...
第16篇:奇偶校验器
Q:本期我们将实现4位奇偶校验逻辑电路,即校验4位二进制代码中 “1” 的个数是奇数或偶数。 A:奇偶校验器的基本原理:采用异或运算对“1”的奇偶个数进行校验,从最高位依次往最低位进行连续异或运算。如果最后的异或运…...
Obsidian+PicGo+Gitee搭建免费图床
之前使用PicGoGitee配合Typora,后来因为换电脑Typora管理笔记不方便,换到Obsidian笔记,此处记录重新搭建图床的坑与经验。 主要参考# picGogitee搭建Obsidian图床,实现高效写作! 1 下载安装PicGo 下载链接https://mo…...
计算机网络复试总结(五)
可能会问: 基础知识问题: 请简述TCP/IP协议栈的层次结构及其功能。 TCP/IP协议栈的层次结构及其功能可以简要概述如下: 层次结构: TCP/IP协议栈通常被划分为四个主要层次,从底层到高层分别是网络接口层(也…...
设计模式 --4:工厂方法模式
总结 : 个人理解: 工厂方法模式就是在简单工程模式的基础下将工厂类抽象出来。如果不抽象工厂类 ,每一次创建一个新的算法,都要修改原来的工厂类,这不符合 开放–封闭原则 将工厂类给抽象出来,让具体的算法…...
Linux系统centos7.6更换yum源以及下载安装包到指定目录
一、Linux系统centos7.6更换yum源 [rootlocalhost sofware]# cd /etc/yum.repos.d/ [rootlocalhost yum.repos.d]# mkdir back [rootlocalhost yum.repos.d]# mv * back [rootlocalhost yum.repos.d]# cp -a /root/software/CentOS7-Base-163.repo . #将准备好的yum源拷贝到指…...
蓝桥杯-子矩阵
""" 题目来源 https://www.lanqiao.cn/problems/3521/learning/?page1&first_category_id1&name%E5%AD%90%E7%9F%A9%E9%98%B5 """ import os import sys from collections import deque# 请在此输入您的代码 n, m, a, b map(int, inpu…...
Nginx 故障排查之斜杠(/) --(附 Nginx 常用命令)
问题场景: 项目中用到了多个子域名,测试环境通过子域名进行接口访问的时候返回 404 NOT_FOUND,经过排查测试后确定是 Nginx 配置问题,而导致事故的根本原因是运维在Nginx配置的时候少配置了一个斜杠(/)&am…...
【超全详解一文搞懂】Scala基础
目录 Scala 01 —— Scala基础一、搭建Scala开发环境安装Scala编译器在IDEA中进行scala编码 二、Scala简介与概述Scala简介Scala概述Scala代码规范 三、理解Scala变量与数据类型Scala的变量与常量Scala和Java变量的区别 Scala的数据类型 四、Scala的程序逻辑1.表达式2.运算符3.…...
16:00面试,16:06就出来了,问的问题有点变态。。。
从小厂出来,没想到在另一家公司又寄了。 到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到8月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40%…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...
css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...
相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
第7篇:中间件全链路监控与 SQL 性能分析实践
7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...
