- Data Hackers Newsletter
- Posts
- Streamlit Authenticator: adicione autenticação aos seus aplicativos Streamlit
Streamlit Authenticator: adicione autenticação aos seus aplicativos Streamlit
Saiba como implementar sistemas de login e gerenciamento de usuários em suas aplicações com o Streamlit-Authenticator
Adicionar autenticação aos seus aplicativos Streamlit nunca foi tão simples! Com o Streamlit Authenticator, você pode implementar um sistema de login seguro e gerenciamento de usuários de maneira rápida e eficaz. Esse pacote oferece configuração prática e funcionalidades poderosas, como o hashing de senhas e o controle de acesso, permitindo que seus aplicativos sejam interativos e protegidos.
Neste post, você verá um passo a passo sobre como integrar o Streamlit Authenticator ao seu projeto, garantindo que apenas usuários autorizados possam acessar funcionalidades e dados sensíveis. Aprenda sobre a criação de um arquivo de configuração em YAML, a personalização de formulários de login e muito mais!
O que é o Streamlit Authenticator
O Streamlit Authenticator é um pacote projetado para adicionar recursos de autenticação a aplicativos desenvolvidos com o Streamlit. Ele fornece uma maneira eficiente para que os desenvolvedores implementem sistemas de autenticação robustos e seguros, permitindo o controle de acesso baseado em diferentes níveis de privilégio. Esse módulo é particularmente útil para aplicativos corporativos ou aqueles que requerem um controle mais rigoroso sobre quem pode acessar certas funcionalidades e dados.

Ao permitir o controle de acesso a funcionalidades e dados sensíveis, o Streamlit Authenticator aumenta consideravelmente a segurança dos projetos
Como usar o Streamlit Authenticator para autenticação
A implementação do Streamlit Authenticator envolve algumas etapas:
1. Instalação
Instale a biblioteca Streamlit-Authenticator via pip:
pip install streamlit-authenticator
2. Hashing de Senhas
Crie um arquivo de configuração YAML que contenha as credenciais dos usuários, incluindo nomes de usuário e senhas em texto puro. Utilize o módulo Hasher para converter as senhas em texto puro em senhas hashed.
Exemplo de config.yaml
:
credentials:
usernames:
jsmith:
email: [email protected]
name: John Smith
password: abc # Para ser substituído pela senha hashed
rbriggs:
email: [email protected]
name: Rebecca Briggs
password: def # Para ser substituído pela senha hashed
cookie:
expiry_days: 30
key: some_signature_key # Deve ser uma string
name: some_cookie_name
preauthorized:
emails:
- [email protected]
Use o Hasher para gerar as senhas hashed:
import streamlit_authenticator as stauth
hashed_passwords = stauth.Hasher(['abc', 'def']).generate()
3. Criando um Widget de Login
Importe o arquivo de configuração e crie um objeto de autenticação:
import yaml
from yaml.loader import SafeLoader
with open('config.yaml') as file:
config = yaml.load(file, Loader=SafeLoader)
authenticator = stauth.Authenticate(
config['credentials'],
config['cookie']['name'],
config['cookie']['key'],
config['cookie']['expiry_days'],
config['preauthorized']
)
Renderize o módulo de login:
name, authentication_status, username = authenticator.login('Login', 'main')
4. Autenticando Usuários
Use o nome e o status de autenticação retornados para permitir que usuários verificados acessem conteúdo restrito.
5. Outras Funcionalidades
Adicione funcionalidades como resetar a senha, registrar novos usuários, gerar senhas aleatórias e atualizar detalhes do usuário, conforme necessário, utilizando os métodos apropriados do authenticator.
6. Atualização do Arquivo de Configuração
Sempre que um usuário atualizar suas credenciais ou ao usar funcionalidades como resetar senha ou registrar um novo usuário, lembre-se de salvar as alterações no arquivo de configuração:
with open('config.yaml', 'w') as file:
yaml.dump(config, file, default_flow_style=False)
Benefícios da autenticação em aplicativos Streamlit
A autenticação em aplicativos Streamlit traz uma série de vantagens significativas que podem melhorar a segurança e a experiência do usuário. Aqui estão alguns dos principais benefícios:
1. Segurança
A autenticação é fundamental para validar as credenciais dos usuários, garantindo que apenas usuários autorizados possam acessar o aplicativo e protegendo dados sensíveis.
2. Controle de Acesso
Com um sistema de autenticação, é possível implementar diferentes níveis de acesso, assegurando que apenas determinados usuários possam realizar ações específicas, fundamental em ambientes corporativos.
3. Recursos Adicionais
Módulos de autenticação oferecem funcionalidades extras como:
Redefinição de senha: Permitem que os usuários recuperem o acesso às suas contas no caso de esquecerem suas senhas.
Registro de novos usuários: Facilita a criação de contas, proporcionando uma experiência mais fluida.
Recuperação de senha e nome de usuário: Ajuda os usuários a recuperarem suas credenciais em caso de esquecimento.
4. Armazenamento Seguro de Senhas
A autenticação pode empregar métodos de criptografia para garantir que as senhas dos usuários sejam armazenadas de forma segura, minimizando riscos de segurança.
5. Facilidade de Integração
Ferramentas como o Streamlit-Authenticator permitem uma simples integração com provedores de autenticação de terceiros, melhorando a experiência geral.

O Streamlit Authenticator permite inclusive incluir funcionalidades avançadas no processo de login
Erros comuns no Streamlit Authenticator
Ao utilizar o Streamlit Authenticator, é importante estar ciente de alguns erros comuns que podem surgir:
1. TypeError: múltiplos valores para o argumento 'cookie_expiry_days'
Esse erro ocorre quando a instância do autenticador é criada e há confusão sobre os argumentos passados. Verifique a documentação atualizada.
2. KeyError: 'st.session_state has no key "authentication_status"'
Este erro acontece se a chave 'authentication_status' não foi inicializada corretamente no st.session_state
. Garanta que todas as condições de inicialização sejam atendidas.
3. List indices must be integers or slices, not str
Esse erro surge quando o código tenta acessar índices de uma lista usando uma string. Verifique a forma como dicionários ou listas são acessados.
4. Alterações na estrutura de dados
O Streamlit Authenticator agora requer que um dicionário seja fornecido como parte da configuração, em vez de listas simples. Esteja ciente dessa mudança ao ajustar o código.
Como integrar o Streamlit Authenticator em seu projeto
1. Instalação
O primeiro passo é instalar o pacote Streamlit-Authenticator. Execute o seguinte comando:
pip install streamlit-authenticator
2. Importação
Após a instalação, importe o módulo em seu código Python:
import streamlit_authenticator as stauth
3. Configuração de credenciais
Crie um arquivo YAML para armazenar as credenciais dos usuários:
credentials:
usernames:
jsmith:
email: [email protected]
name: John Smith
password: abc # Substituir pela senha criptografada
rbriggs:
email: [email protected]
name: Rebecca Briggs
password: def # Substituir pela senha criptografada
cookie:
expiry_days: 30
key: random_signature_key # Deve ser uma string
name: random_cookie_name
preauthorized:
emails:
- [email protected]
4. Criptografia das senhas
As senhas devem ser armazenadas de forma segura. Utilize o módulo Hasher:
hashed_passwords = stauth.Hasher(['abc', 'def']).generate()
Substitua as senhas em texto simples no arquivo YAML pelas criptografadas.
5. Criação do widget de login
Importe o arquivo YAML no seu script:
import yaml
from yaml.loader import SafeLoader
with open('config.yaml') as file:
config = yaml.load(file, Loader=SafeLoader)
Crie o objeto do autenticador:
authenticator = stauth.Authenticate(
config['credentials'],
config['cookie']['name'],
config['cookie']['key'],
config['cookie']['expiry_days'],
config['preauthorized']
)
Renderize o widget de login:
name, authentication_status, username = authenticator.login('Login', 'main')
6. Verificação do status de autenticação
Depois de configurado, use os valores retornados para personalizar a experiência do usuário com base nas credenciais e verificar se a autenticação foi bem-sucedida.
Vale a pena usar o Streamlit Authenticator?
Implementar autenticação em seus aplicativos Streamlit com o Streamlit Authenticator simplifica a criação de sistemas de login robustos e seguros. No decorrer deste post, você aprendeu a instalar a biblioteca e entendeu como criar arquivos de configuração em YAML, realizar o hashing de senhas e renderizar um widget de login, sempre mantendo a segurança e a integridade dos dados dos usuários.
Além disso, discutimos os benefícios dessa autenticação, como o controle de acesso e algumas funcionalidades adicionais, que não apenas melhoram a segurança, mas também proporcionam uma experiência de usuário mais fluida. Agora que você tem as ferramentas para implementar essa funcionalidade essencial, está preparado para criar aplicativos mais seguros e eficientes.