1

我使用以下代码创建一个新用户:

    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)

在注册期间实际上是在创建用户之前调用的?如何在注册后立即对用户进行身份验证和重定向?

4

1 回答 1

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'
于 2013-05-28T06:30:47.820 回答