5

Mam problem, w którym pomyślnie rejestruję użytkowników - jednak chcę, aby użytkownicy byli zalogowani przy rejestracji. Oto kod, który reprezentuje mój widok rejestracji. Wszelkie przemyślenia na temat tego, dlaczego użytkownik nie jest automatycznie zalogowany?Django automatyczne logowanie po rejestracji użytkownika (1.4)

Uwagi:

  • Użytkownik jest zarejestrowany poprawnie, mogą log po tej
  • authenticate (** kwargs) zwraca poprawną użytkownikowi
  • W settings.py mam:

    AUTHENTICATION_BACKENDS = ('django.contrib.auth.backends.ModelBackend',) 
    

Dzięki!

def register(request): 
    user_creation_form = UserCreationForm(request.POST or None) 
    if request.method == 'POST' and user_creation_form.is_valid(): 
     u_name = user_creation_form.cleaned_data.get('username') 
     u_pass = user_creation_form.cleaned_data.get('password2') 
     user_creation_form.save() 
     print u_name # Prints correct username 
     print u_pass # Prints correct password 
     user = authenticate(username=u_name, 
          password=u_pass) 
     print 'User: ', user # Prints correct user 
     login(request, user) # Seems to do nothing 
     return HttpResponseRedirect('/book/') # User is not logged in on this page 
    c = RequestContext(request, {'form': user_creation_form}) 
    return render_to_response('register.html', c) 

Odpowiedz

3

Ah! Rozgryzłem to. Jeśli ktoś ma ten problem, zaimportuj login z django.contrib.auth, jeśli wywołasz go ręcznie - importowałem widok. Skomentowany kod reprezentuje zły import dla mojej sytuacji.

# from django.contrib.auth.views import login 
from django.contrib.auth import authenticate, logout, login 
3

zrobić to w ten sposób:

u.backend = "django.contrib.auth.backends.ModelBackend" 
login(request, u) 
+0

Dzięki! To też dobrze wiedzieć. – zallarak

+0

Używam tego również – nemesisdesign

1

dla poglądów tu na podstawie klasy był kod, który pracował dla mnie (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 = UserCreationForm 
    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) 
+0

twoja klasa 'form_class' powinna być' UserCreationForm', a nie 'UserCreateForm', jak sądzę. – blissini

+0

dzięki @blissini zmieniono to – colins44

+0

Ponieważ potrzebowałem rozwiązania tego, jak @Patrick wskazuje w komentarzu w tym wątku: http://stackoverflow.com/questions/3222549/how-to-automatically-login-a-user po rejestracji w django, jeszcze lepiej jest uwierzytelnić za pomocą 'authenticate (nazwa_użytkownika = form.cleaned_data ['username'], password = form.cleaned_data ['password1'])) na wypadek gdyby coś zostało zmienione z jakiegoś powodu podczas walidacji. – blissini

Powiązane problemy