5

У меня проблема, когда я успешно регистрирую пользователей - однако, я хочу, чтобы пользователи вошли в систему при регистрации. Вот код, который представляет мое регистрационное представление. Любые мысли о том, почему пользователь не автозарегистрирован?Django автоматический вход в систему после регистрации пользователя (1.4)

Примечания:

  • Пользователь регистрируется правильно, они могут войти после этого
  • подлинности (** kwargs) возвращает правильный пользователь
  • В settings.py у меня есть:

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

Спасибо!

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) 

ответ

3

Ах! Я понял. Если у кого-то есть эта проблема, импортируйте логин из django.contrib.auth, если вы вызываете его вручную - я импортировал представление. Прокомментированный код представляет собой плохой импорт для моей ситуации.

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

я сделать это таким образом:

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

Спасибо! Это тоже хорошо знать. – zallarak

+0

Я использую это также – nemesisdesign

1

для представлений на основе класса здесь был код, который работал для меня (Джанго 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

, ваш 'form_class' должен быть' UserCreationForm', а не 'UserCreateForm', я думаю. – blissini

+0

спасибо @blissini изменил его – colins44

+0

Как мне было нужно решение для этого, как @Patrick указывает в комментарии в этой теме: http://stackoverflow.com/questions/3222549/how-to-automatically-login-a-user -after-registration-in-django, еще лучше аутентифицироваться с помощью 'authenticate (username = form.cleaned_data ['username'], password = form.cleaned_data ['password1'])' в случае, если что-то по какой-то причине модифицируется во время проверки. – blissini