创建后的Django用户登录不起作用

时间:2014-10-21 18:04:59

标签: python django django-authentication

我使用django auth框架进行用户注册,然后立即登录用户。这是我的代码:

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。使用该数据,我确定在注册后用户被重定向到哪里。

但是当我尝试将创建的用户登录时出现问题。没有异常被引发,但由于某种原因,后续重定向仍然在request.user中保留AnonymousUser。但是当我手动登录创建的用户时,登录工作正常。我在这里做错了什么?

感谢您的帮助。

2 个答案:

答案 0 :(得分: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

并更新了对loginauthenticate的所有auth_loginauth_authenticate来电,现在似乎有效。

谢谢大家的帮助!

答案 1 :(得分:0)

这只是一个猜测,但也许是super()。form_valid()再次保存UserCreationForm,这将再次调用set_password(),因此设置一个新的盐渍密码,使您的首次登录失效:)

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