我使用以下代码创建新用户:
form = UserCreationForm(request.POST)
if form.is_valid():
username = form.clean_username()
password = form.clean_password2()
new_user = form.save()
以上工作正常。接下来我希望登录用户并重定向到主页,如下所示
user = authenticate(username=username, password=password)
auth.login(request, user)
return HttpResponseRedirect("/dashboard/home")
我收到以下错误消息:
'AnonymousUser' object has no attribute 'backend'
一点点调试显示“用户”为“无”。但是,如果我尝试登录刚刚创建的用户,它就可以工作,即用户已创建,但
user = authenticate(username=username, password=password)
不是在我的注册函数中返回用户(完全相同的代码随后在我的登录功能中工作)。追溯具有以下内容:
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/core/handlers/base.py in get_response
response = callback(request, *callback_args, **callback_kwargs)
它提供了一个小线索。是否发生了某种回调
user = authenticate(username=username, password=password)
注册期间实际上是在创建用户之前调用的吗?如何在注册后立即对用户进行身份验证和重定向?
答案 0 :(得分:0)
Django文档有一个部分,看起来你做的是同样的事情:
https://docs.djangoproject.com/en/1.5/topics/auth/default/#django.contrib.auth.login
def my_view(request):
username = request.POST['username']
password = request.POST['password']
user = authenticate(username=username, password=password)
if user is not None:
if user.is_active:
login(request, user)
# Redirect to a success page.
else:
# Return a 'disabled account' error message
else:
# Return an 'invalid login' error message.
我的猜测是用户名/密码错误或用户处于非活动状态(user.is_active = False
)
另外,尝试在调用auth.login
user.backend = 'django.contrib.auth.backends.ModelBackend'