当前位置: 首页 > news >正文

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

       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中,详细实现见本文第2部分的20-22行代码,典型示例如下:

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

4.智能问答结果

http://www.lryc.cn/news/158615.html

相关文章:

  • [虚幻引擎插件介绍] DTGlobalEvent 蓝图全局事件, Actor, UMG 相互回调,自由回调通知事件函数,支持自定义参数。
  • 2023数学建模国赛选题建议及BC题思路
  • vue3:4、组合式API-setup选项
  • 【C刷题训练营】第三讲(c语言入门训练)
  • 简述视频智能分析EasyCVR视频汇聚平台如何通过“AI+视频融合”技术规避八大特殊作业风险
  • 2023年9月NPDP产品经理国际认证报名,找弘博创新
  • 【MySQL】MySQL的安装,登录,配置和相关命令
  • 攻防世界-WEB-php_rce
  • WRFDA资料同化实践技术
  • C++11新特性② | 左值、左值引用、右值与右值引用
  • Python Opencv实践 - Harris角点检测
  • el-upload上传图片到七牛云或阿里云
  • Web jQuery—选择器、样式和效果
  • Java和Kotlin的Field在继承中的不同表现
  • MySQL 子查询
  • Ubuntu离线或在线安装CMake
  • 后端面试话术集锦第 十七 篇:MySQL面试话术
  • < 文件资源管理器 > 和 < 此电脑 > 有什么区别?
  • 线上问诊:可视化展示
  • 如何选择合适的HTTP代理服务器
  • Car Window Control Reset
  • 序列号序列号
  • SSM(Spring-Mybatis-SpringMVC)
  • MySQL——数据的删除以及MySQL中的约束
  • 静态路由 网络实验
  • 数据结构-01 数据结构基本概念,算法时间复杂度,空间复杂度
  • 【Redis】Bitmap 使用及应用场景
  • C#,数值计算——用于积分函数与方法的Stiel类的计算方法与源程序
  • 报错:为什么数组明明有内容但打印的length是0
  • go gin gorm连接postgres postgis输出geojson