Mind Bending

No meu último artigo eu demonstrei como customizar a autenticação no Django. Hoje um colega do Grupo de Django no Telegram levantou a questão de como logar usuário automaticamente após este efetuar o registro. Apesar de achar que este não é um fluxo ideia, o correto seria haver uma confirmação de email antes que o usuário faça login, resolvi brincar com a ideia para ajudar esse colega.

Django

Lembrando que o código deste artigo usa como base o código do meu último artigo. Então, antes de seguir neste texto, leia o anterior e obtenha os códigos fonte.

Em suma, a única alteração que temos que fazer é no arquivo de views inserindo os seguintes imports:

from django.contrib.auth import authenticate
from django.contrib.auth import login as auth_login

Note que eu "renomeei" o import da função login, pois esta conflitava com o nome da view login.

Agora, só é necessário realizar uma adequação na view RegistrationView para que ela fique da seguinte forma:

class RegistrationView(CreateView):
    form_class = CustomUserCreationForm
    success_url = reverse_lazy('users:login')
    template_name = "users/register.html"

    def post(self, request, *args, **kwargs):
        form = self.get_form()
        is_valid = form.is_valid()
        response = super().post(request, *args, **kwargs)
        if is_valid:
            new_user = authenticate(
                username=form.cleaned_data['email'],
                password=form.cleaned_data['password1'],
            )
            auth_login(request, new_user)
            return HttpResponseRedirect(reverse_lazy('users:home'))
        return response

Em suma, apenas sobrescrevemos o método post. Tem um pequeno detalhe que é validação do form antes de chamar super().post(), pois, se chamado posteriormente, a validação do form sempre será negativa, pois o usuário já existe na base. Em seguida não tem mais nenhum segredo.

Pronto, as simple as that.

Magnun

Magnun

Engenheiro de telecomunicações por formação, mas trabalha com suporte à infraestrutura GNU/Linux, e nas horas vagas é Programador OpenSource (Python e C) desenhista e escritor do Mind Bending Blog.


Comments

comments powered by Disqus