segunda-feira, 28 de outubro de 2024

Gerar e Enviar uma Senha por E-mail com Django

 


Dev: Rodrigo Rodrigues

1. Importações:


  • import random: Importa o módulo random do Python, que permite gerar números aleatórios.
  • import string: Importa o módulo string, que fornece acesso a strings contendo caracteres como letras e dígitos.
  • from django.core.mail import send_mail: Importa a função send_mail do Django, que é usada para enviar emails.

2. Classe do Formulário:


  • Define uma classe chamada CustomUserCreationForm que herda de forms.ModelForm. Essa classe representa um formulário Django que é usado para criar novos usuários.

3. Método save:


  • Este método é chamado quando o formulário é enviado.
  • user = super().save(commit=False): Salva os dados do usuário no banco de dados, mas não salva a senha ainda. O argumento commit=False impede que o método save seja executado completamente.

4. Verificação de Autenticação:


  • Verifica se o usuário já está autenticado. Se sim, significa que ele está tentando redefinir sua senha.

5. Gerando uma Senha Aleatória:



  • password = ''.join(random.choices(string.digits, k=6)): Gera uma senha aleatória de 6 dígitos usando o módulo random.
  • random.choices(string.digits, k=6): Seleciona 6 dígitos aleatórios da string string.digits.
  • ''.join(...): Junta os dígitos selecionados em uma única string.

6. Definindo a Senha do Usuário:


  • user.set_password(password): Define a senha gerada para o usuário. O Django criptografa a senha antes de salvá-la no banco de dados.

7. Forçando a Mudança de Senha:


  • user.force_change_password = True: Define que o usuário será forçado a mudar sua senha na próxima vez que fizer login.

8. Enviando o Email:


  • send_mail(...): Envia um email para o usuário com a senha gerada.
  • 'Sua senha provisória': Assunto do email.
  • f'Sua senha provisório para entrar na plataforma é: {password}': Corpo do email, incluindo a senha gerada.
  • 'email@email.com': Endereço de email do remetente.
  • [user.email]: Endereço de email do destinatário.
  • fail_silently=False: Se o email não puder ser enviado, uma exceção será lançada.

9. Salvando o Usuário:


  • user.save(): Salva o usuário no banco de dados, incluindo a senha criptografada.
  • return user: Retorna o objeto user para que possa ser usado em outras partes do código.

10. Bloco else:


  • Este bloco é executado se o usuário não estiver autenticado.
  • user.set_password(self.cleaned_data["password1"]): Define a senha fornecida pelo usuário no formulário.
  • if commit: user.save(): Salva o usuário no banco de dados se o argumento commit for True.
  • return user: Retorna o objeto user.

Observações:

  • Este código gera senhas aleatórias de 6 dígitos, mas é importante lembrar que senhas aleatórias não são consideradas seguras.
  • Em um sistema de produção, você deve usar uma biblioteca de criptografia para gerar senhas mais fortes e armazená-las de forma segura no banco de dados.
  • O código também envia a senha em texto simples por email, o que é uma prática insegura. Você deve implementar um sistema de redefinição de senha mais seguro que não revele a senha diretamente ao usuário.


Nenhum comentário:

Postar um comentário

Melhore a Experiência do Usuário: Tratando Erros de Formulário no Django

Domando os Erros: Uma Abordagem Prática para Formulários em Django Desenvolver formulários robustos e amigáveis é essencial para qualquer ap...