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' が None であることがわかります。ただし、作成したばかりのユーザーにサインインしようとすると機能します。つまり、ユーザーは作成されますが、

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 docs にはこれに関するセクションがあり、同じことをしているようです:

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 に答える