Django inicio de sesión automático después del registro del usuario (2.1.4) [duplicado]
Esta pregunta ya tiene una respuesta aquí:
Django: Cómo iniciar sesión en el usuario directamente después del registro utilizando CreateView @ genéri 1 respuestaEl inicio de sesión automático de usuarios recién registrados no funciona en el caso de una vista de registro "basada en clases".
Seguí el ejemplo deeste tutorial, que propone la siguiente vista 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'
Intenté incluir la solución basada en clases deesta respuesta, pero después de registrar con éxito un nuevo usuario, el inicio de sesión no ocurre como se esperaba. ¿Hay cambios en Django 2.1.4 que puedan causar un mal funcionamiento?
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)