2014-10-21 3 views
0

Я использую фреймворк django auth для регистрации пользователя, а затем сразу же регистрирую пользователя. Вот мой код:Вход пользователя в Django после создания не работает

class SignUpView(FormMixin, ProcessFormView): 
    http_method_names = ['post'] 

    form_class = UserCreationForm 
    success_url = reverse_lazy('default_page') 

    def form_valid(self, form): 
     if form.cleaned_data['is_usertype_1']: 
      self.success_url = reverse_lazy('some_page') 

     form.save() 

     user = authenticate(username=form.cleaned_data['username'], password=form.cleaned_data['password1']) 

     if user is None: 
      raise Exception("Could not authenticate the new user") 

     login(self.request, user) 

     return super(SignUpView, self).form_valid(form) 

    def form_invalid(self, form): 
     pass 

В принципе, я продлил UserCreationForm добавить is_usertype_1 поле, и отображение его в качестве BooleanField. И используя эти данные, я определяю, куда пользователь перенаправляется после регистрации.

Но проблема возникает, когда я пытаюсь зарегистрировать созданного пользователя. No Exception получает повышение, но по какой-то причине последующие переадресации все еще содержат AnonymousUser в request.user. Но когда я вхожу в систему с созданным пользователем вручную, логин работает нормально. Что я здесь делаю неправильно?

Спасибо за помощь заранее.

+0

Вы уверены, что ваша форма верна? – danielcorreia

+0

Да, новый пользовательский объект действительно сохраняется в БД (я вызываю form.save нет, где еще). Кроме того, только что изменил form_invalid, чтобы повысить исключение, но ничего не вызвало. –

+0

После 'login (self.request, user)' попробуйте его проверить: 'if user.is_authenticated(): print (1)' – madzohan

ответ

1

оказывается, это та же проблема, как Django automatic login after user registration (1.4)

После был мой импорта заявления:

from django.contrib.auth import forms as auth_forms, views as auth_views, login, authenticate 

Изменено его

from django.contrib.auth import forms as auth_forms, views as auth_views 
from django.contrib.auth import login as auth_login, authenticate as auth_authenticate 

и обновленное все вызов в login и authenticate к auth_login и auth_authenticate и, кажется, работает в настоящее время.

Спасибо вам за помощь!

0

Это только предположение, но, возможно, супер(). Form_valid() спасает UserCreationForm во второй раз, который будет вызывать set_password() снова, поэтому установив новый соленый пароль, недействительности своего первый логина :)

https://docs.djangoproject.com/en/1.7/_modules/django/contrib/auth/forms/#UserCreationForm

+0

'FormMixin' и' ProcessFormView', похоже, не имеют никакого вызова 'form.save()'. Кроме того, я попробовал переписать метод 'save' для регистрации при каждом вызове, и кажется, что он только вызывается один раз –

Смежные вопросы