基于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.智能问答结果

基于Streamlit的应用如何通过streamlit-authenticator组件实现用户验证与隔离_第1张图片

你可能感兴趣的:(后端,数据应用,机器学习,人工智能,大模型)