/ / Cómo iniciar sesión automáticamente un usuario después de registrarse en django - django

Cómo iniciar sesión automáticamente un usuario después de registrarse en django - django

Esto es lo que estoy usando actualmente para el registro:

def register(request):
if request.method == "POST":
form = UserCreationForm(request.POST)
if form.is_valid():
new_user = form.save()
messages.info(request, "Thanks for registering. Please login to continue.")
return HttpResponseRedirect("/dashboard/")
else:
form = UserCreationForm()
return render_to_response("accounts/register.html", {
"form": form,
}, context_instance=RequestContext(request))

¿Es posible no requerir que el usuario inicie sesión manualmente después de crear una cuenta, sino simplemente iniciar sesión automáticamente? Gracias.

edición: había intentado la función de inicio de sesión () sin éxito. Creo que el problema es que AUTHENTICATION_BACKENDS no se configuró.

Respuestas

88 para la respuesta № 1

Utilizando el authenticate() y login() funciones:

from django.contrib.auth import authenticate, login

def register(request):
if request.method == "POST":
form = UserCreationForm(request.POST)
if form.is_valid():
new_user = form.save()
messages.info(request, "Thanks for registering. You are now logged in.")
new_user = authenticate(username=form.cleaned_data["username"],
password=form.cleaned_data["password1"],
)
login(request, new_user)
return HttpResponseRedirect("/dashboard/")

5 para la respuesta № 2

para las vistas basadas en clase, aquí estaba el código que me funcionó (django 1.7)

from django.contrib.auth import authenticate, login
from django.contrib.auth.forms import UserCreationForm
from django.views.generic import FormView

class SignUp(FormView):
template_name = "signup.html"
form_class = UserCreateForm
success_url="/account"

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=username, password=password)
login(self.request, user)
return super(SignUp, self).form_valid(form)