Login automático do Django após o registro do usuário (2.1.4) [duplicado]
Esta pergunta já tem uma resposta aqui:
Django: Como fazer login do usuário diretamente após o registro usando o CreateView @ genéri 1 respostaO login automático de usuários recém-registrados não está funcionando no caso de uma exibição de registro "com base em classe"
Eu segui o exemplo deeste tutorial, que propõe a seguinte visualização de registro:
# myapp/views.py
from django.contrib.auth.forms import UserCreationForm
from django.urls import reverse_lazy
from django.views import generic
class SignUp(generic.CreateView):
form_class = UserCreationForm
success_url = reverse_lazy('login')
template_name = 'signup.html'
Eu tentei incluir a solução baseada em classe deesta resposta, mas após o registro bem-sucedido de um novo usuário, o login não ocorre conforme o esperado. Existem mudanças no Django 2.1.4 que podem causar mau funcionamento?
myapp.users.views
:
from django.views import generic
from django.contrib.auth import authenticate, login
from .forms import CustomUserCreationForm
class SignUp(generic.CreateView):
form_class = CustomUserCreationForm
success_url = '/index'
template_name = 'signup.html'
#auto login after register:
def form_valid(self, form):
#save the new user first
form.save()
#get the username and password
username = self.request.POST['username']
password = self.request.POST['password1']
#authenticate user then login
user = authenticate(username=form.cleaned_data['username'], password=form.cleaned_data['password1'],)
login(self.request, user)
return super(SignUp, self).form_valid(form)