admin管理员组文章数量:1794759
Streamlit 实现登录注册验证
在开发基于 Streamlit 的应用时,用户认证功能是一个常见需求。本文将介绍如何通过两种方式来实现登录注册功能:手动实现 和 使用 Streamlit-Authenticator 库。手动实现虽然灵活,但需要自行处理密码加密、验证等细节;而 Streamlit-Authenticator 库则大大简化了这些操作,让我们能够快速搭建一个完整的用户认证系统。
一、手动实现登录注册
我们首先通过手动方式实现登录和注册功能。这种方式适用于你需要对认证流程有更多控制的场景。
1. 环境准备
在开始之前,需要确保安装了 streamlit
和 bcrypt
库,用于处理用户界面和密码加密。
pip install streamlit bcrypt
2. 注册功能
在注册功能中,用户输入用户名和密码。密码将通过 bcrypt 进行加密存储,以提高安全性。
代码语言:javascript代码运行次数:0运行复制import streamlit as st
import bcrypt
# 模拟的用户数据库
users_db = {}
# 注册页面
def register():
st.title("用户注册")
# 输入用户名和密码
new_user = st.text_input("请输入用户名")
new_password = st.text_input("请输入密码", type="password")
if st.button("注册"):
if new_user in users_db:
st.warning("用户名已存在,请选择其他用户名")
else:
# 对密码进行加密
hashed_password = bcrypt.hashpw(new_password.encode('utf-8'), bcrypt.gensalt())
users_db[new_user] = hashed_password
st.success("注册成功!")
st.info("请返回登录页面")
if __name__ == '__main__':
register()
在这个示例中,用户的密码会被 bcrypt 加密后存储,保证其安全性。每次用户注册时,都会生成一个新的加密密码,并存入 users_db
。
3. 登录功能
接下来是登录功能。用户输入用户名和密码后,系统会验证其输入的密码是否与存储的加密密码匹配。
代码语言:javascript代码运行次数:0运行复制# 登录页面
def login():
st.title("用户登录")
# 输入用户名和密码
username = st.text_input("请输入用户名")
password = st.text_input("请输入密码", type="password")
if st.button("登录"):
if username in users_db:
# 验证密码是否匹配
hashed_password = users_db[username]
if bcrypt.checkpw(password.encode('utf-8'), hashed_password):
st.success(f"欢迎回来,{username}!")
st.info("你已成功登录")
main_page()
else:
st.error("密码错误,请重试")
else:
st.warning("用户名不存在")
# 登录成功后的主页面
def main_page():
st.title("主页面")
st.write("这是登录后的主页面内容")
if __name__ == '__main__':
login()
这里通过 bcrypt.checkpw()
函数验证用户输入的密码是否与数据库中的加密密码匹配。如果密码验证成功,用户会进入主页面。
4. 页面导航
为了方便用户在登录和注册页面之间切换,可以通过以下代码实现简单的页面导航功能。
代码语言:javascript代码运行次数:0运行复制def main():
st.sidebar.title("导航")
choice = st.sidebar.radio("选择页面", ["登录", "注册"])
if choice == "登录":
login()
elif choice == "注册":
register()
if __name__ == '__main__':
main()
这个页面导航让用户可以在侧边栏自由切换登录和注册功能,从而提升用户体验。
5. 小结
通过以上代码,我们实现了一个基本的用户登录注册系统,包括:
- 注册功能:加密存储用户密码,防止明文密码泄露。
- 登录功能:验证用户输入的密码是否与存储的加密密码匹配。
- 页面导航:让用户可以在不同功能页面间切换。
这种手动实现方式适合需要灵活控制认证流程的场景,但当项目规模较大或需求更加复杂时,这种方式可能会显得繁琐。接下来,我们介绍如何使用 Streamlit-Authenticator 库来简化这一过程。
二、使用 Streamlit-Authenticator 实现登录注册
Streamlit-Authenticator 是一个专门用于 Streamlit 应用的用户认证库,它能够帮助我们快速构建基于哈希加密和JWT令牌的认证系统。使用该库,我们可以省去手动实现登录、注册、加密等繁琐的过程。
1. 安装 Streamlit-Authenticator
首先,安装 streamlit-authenticator
库:
pip install streamlit-authenticator
2. 使用 Streamlit-Authenticator 实现认证
以下是使用 streamlit-authenticator
库实现用户登录的代码示例:
import streamlit as st
import streamlit_authenticator as stauth
import yaml
from yaml.loader import SafeLoader
# 加载用户数据
config = {
'credentials': {
'usernames': {
'user1': {
'name': 'User One',
'password': stauth.Hasher(['password1']).generate()[0]
},
'user2': {
'name': 'User Two',
'password': stauth.Hasher(['password2']).generate()[0]
}
}
},
'cookie': {
'expiry_days': 30,
'key': 'some_signature_key'
},
'preauthorized': {
'emails': [
'user1@example',
'user2@example'
]
}
}
# 创建 Authenticator 对象
authenticator = stauth.Authenticate(
config['credentials'],
config['cookie']['key'],
config['cookie']['expiry_days'],
)
# 登录功能
name, authentication_status, username = authenticator.login('登录', 'main')
if authentication_status:
st.success(f'欢迎回来, {name}!')
# 退出登录按钮
authenticator.logout('退出', 'sidebar')
st.write("这里是登录后显示的内容")
elif authentication_status == False:
st.error('用户名或密码错误')
elif authentication_status == None:
st.warning('请输入用户名和密码')
3. 代码解析
- 用户数据配置:
config
字典模拟用户数据库,stauth.Hasher
用于生成加密密码。 - 登录功能:
authenticator.login()
用于处理登录验证,根据返回值authentication_status
判断用户登录状态。 - Cookie:配置项中的
cookie
设置了 JWT 的有效期,并使用一个密钥来确保用户登录状态的持久性。 - 登出功能:用户成功登录后可以通过侧边栏中的按钮退出登录。
通过 Streamlit-Authenticator
,我们大大简化了用户登录、认证和密码加密的过程。
4. 小结
Streamlit-Authenticator 提供了开箱即用的用户认证功能,尤其适用于需要快速搭建用户管理系统的场景。相比手动实现,它的优点包括:
- 内置的密码加密机制。
- 支持长时间登录的 JWT 机制。
- 更加安全、便捷的用户认证体验。
三、总结
本文展示了两种实现 Streamlit 用户认证的方式:
- 手动实现:我们通过
bcrypt
加密用户密码,自己实现了登录、注册和认证的基本功能。这种方式适合需要灵活处理认证逻辑的场景。 - 使用 Streamlit-Authenticator:该库简化了整个认证流程,提供了更安全和方便的解决方案,适合需要快速构建用户系统的场景。
根据你的需求,可以选择适合的实现方式。对于更复杂或更大规模的应用,Streamlit-Authenticator 无疑是更好的选择。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2024-10-05,如有侵权请联系 cloudcommunity@tencent 删除streamlit登录加密系统存储本文标签: Streamlit 实现登录注册验证
版权声明:本文标题:Streamlit 实现登录注册验证 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1754895545a1707882.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论