基于Streamlit的应用如何通过streamlit-authenticator组件实现用户验证与隔离

news/2024/7/20 19:27:48 标签: 机器学习, 人工智能, 大模型

       Streamlit框架中默认是没有提供用户验证组件的,大家在基于streamlit快速实现web应用服务过程中,不可避免的需要配置该应用的访问范围和权限,即用户群体,一般的做法有两种,一种是通过用户密码验证机制,要求只有成功登录后的用户才可访问该应用,一种是白名单策略,比如通过系统级的防护墙进行设置,或者通过Fastapi的白名单过滤机制(即app.middleware('http'))来实现。本文主要阐述前一种,具体如下。

1.安装streamlit-authenticator组件并引入
pip3 install streamlit
pip3 install streamlit-authenticator
import streamlit as st
import streamlit_authenticator as stauth

运行环境:python3.10.4,torch1.13.1,streamlit1.26.0,streamlit-authenticator0.2.2

2.在应用中使用该组件
def mainContent():  
    container = st.container()
    # create a prompt text for the text generation  
    prompt_text = st.text_area(label="用户命令输入",  
                               height=100,  
                               placeholder="请在这儿输入您的命令")
    # 其他语句...
    
if __name__ == "__main__":  
    # 用户信息,后续可以来自DB  
    names = ['Oil领域用户', '管理员'] # 用户名
    usernames = ['llm-oil', 'dataManagerAdmin']  # 登录名
    passwords = ['S6rJam', 'Abcd1234!#!']  #登录密码
    # 对密码进行加密操作,后续将这个存放在credentials中
    hashed_passwords = stauth.Hasher(passwords).generate() 
     
	# 定义字典,初始化字典
    credentials = {'usernames': {}}    
    # 生成服务器端的用户身份凭证信息  
    for i in range(0, len(names)):  
        credentials['usernames'][usernames[i]] = {'name': names[i], 'password': hashed_passwords[i]}  
    authenticator = stauth.Authenticate(credentials, 'some_cookie_name', 'some_signature_key', cookie_expiry_days=0)  
    name, authentication_status, username = authenticator.login('Login', 'main')  
    
    if authentication_status:  # 登录成功
        mainContent()  
    elif authentication_status == False:  #登录失败
        st.error('Username/password is incorrect')  
    elif authentication_status == None:  #未输入登录信息
        st.warning('Please enter your username and password')
3.stauth.Authenticate()接口的第一个参数格式

由于treamlit-authenticator组件的升级影响,stauth.Authenticate()接口的第一个参数类型已经调整为dict字典格式,用户身份信息存放在dict类型的credentials中,典型示例如下:

{'usernames': {'llm-oil': {'name': 'Oil领域用户', 'password': '$2b$12$LSvJNuFncmNpC3jlRva9k.ttsaHevzIvQRnvs8sJxJao/Der2fD.W'}, 'dataManagerAdmin': {'name': '管理员', 'password': '$2b$12$eHSzZXTaHcsfHDCYaYSjB.R9K35b4H7suQhHUSfu/3Zb9Q6CWAKqG'}}}

4.智能问答结果


http://www.niftyadmin.cn/n/5009688.html

相关文章

JS多个HTTP请求限制最大并发数

在JavaScript中,可以使用Promise和async/await结合的方式来实现限制最大并发数的并行请求。以下是几个示例代码: 1、实例一: const arr Array.from({ length: 100 }, (value, index) > index 1); // 生成一个包含100个元素的数组// 模…

Unity——脚本与导航系统(上)

Unity内置了一个比较完善的导航系统,一般称为Nav Mesh(导航网格),用它可以满足大多数游戏中角色自动导航的需求。 一、导航系统相关组件 Unity的导航系统由以下几个部分组成: Nav Mesh。Nav Mesh与具体的场景关联&…

vue表格不显示列号123456

我在网上找了半天,都是如何添加列号123456的,没有找到不显示列号的参考,现在把这个解决了,特此记录一下。 没有加右边的就会显示,加上右边的就隐藏了

Linux TCP链接查看和调整

查看Linux的TCP连接数的方法如下: 统计80端口连接数 netstat -nat|grep -i "80"|wc -l统计httpd协议连接数 ps -ef|grep httpd|wc -l统计已连接上的,状态为“established”的TCP连接数 netstat -na|grep ESTABLISHED|wc -l统计某个IP地址连…

基于SpringBoot的摄影跟拍预定管理系统

基于SpringBootVue的摄影跟拍预定管理系统,前后端分离 开发语言:Java数据库:MySQL技术:SpringBoot、Vue、Mybaits Plus、ELementUI工具:IDEA/Ecilpse、Navicat、Maven 【系统功能】   角色:管理员、用户…

✔ ★算法基础笔记(Acwing)(一)—— 基础算法(20道题)【java版本】

基础算法 一、快速排序1. 快速排序例题2. 第k个数( 快速选择 ) ✔ ✔1.31★快排二刷总结( 4点 ) 二、归并排序1. 归并排序模板题 ✔ ✔1.31★二刷总结 ★2. 逆序对的数量 ✔ ✔1.31★二刷总结 三、二分1. 数的范围 ✔1.31★二刷总结(mid > x 则是 输出最左边一个)第一个大于…

ORACLE集群管理-19C RAC重新配置IPV6

1 问题概述 数据库已经配置和IPV6和 IPV4双线协议,需要重新配置IPV6 2 关闭相关资源 1 root用户执行 ./srvctl stop scan_listener -i 1 ./srvctl stop scan ./srvctl stop listener -n orcldb1 ./srvctl stop listener -n orcldb2 ./srvctl stop vip -n orcldb…

蓝桥杯官网练习题(星期一)

题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 整个 2020 世纪(1901 年 1 月 1 日至 2000 年 12 月 3131 日之间),一共有多少个星期一?(不要告诉我你不知道今天是星…