用户验证: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%…...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
