我使用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
。但是当我手动登录创建的用户时,登录工作正常。我在这里做错了什么?
感谢您的帮助。
答案 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
并更新了对login
和authenticate
的所有auth_login
和auth_authenticate
来电,现在似乎有效。
谢谢大家的帮助!
答案 1 :(得分:0)
这只是一个猜测,但也许是super()。form_valid()再次保存UserCreationForm,这将再次调用set_password(),因此设置一个新的盐渍密码,使您的首次登录失效:)
https://docs.djangoproject.com/en/1.7/_modules/django/contrib/auth/forms/#UserCreationForm