7

私はdjangoappengineを使用しています。新しいユーザーを作成し、そのユーザーを認証してログインしようとすると、次のエラーが発生しますAttributeError: 'AnonymousUser' object has no attribute 'backend'

私のコードは単純で、次のようになります。

user = User.objects.create_user(username, username, password)
user.set_password(password)
user.save()

user = django.contrib.auth.authenticate(username=username, password=password)
django.contrib.auth.login(request, user)

本番環境で次のエラーが発生するだけで、たまにしか発生しません。

web req_create: 'AnonymousUser' object has no attribute 'backend'
Traceback (most recent call last):
  File "/base/data/home/apps/s~XXXXX/1.356802202883392818/XXXX/XXX.py", line 332, in req_create
    login(request, user)
  File "/base/data/home/apps/s~XXXXX/1.356802202883392818/django/contrib/auth/__init__.py", line 82, in login
    request.session[BACKEND_SESSION_KEY] = user.backend
AttributeError: 'AnonymousUser' object has no attribute 'backend'

確かではありませんが、この例外は高レプリケーション データ ストアとその結果整合性によるものではないかと感じています。authenticate()これでユーザー値が保存され、クエリが実行されると思いlogin()ますが、ユーザー値はまだ HRDS に反映されていません。誰かがこれが真実であることを確認できますか? もしそうなら、それはどのように修正されますか?

4

4 に答える 4

3

ユーザーを保存すると、自動的にアクティブ化されません。AnonymousUserのリンクを確認して、ユーザーがどのようになるかを確認してくださいAnonymousUser

そのため、ユーザーを にする可能性のあるすべての項目を設定する必要がありますAnonymousUser。認証する前に を確認してくださいuser.is_anonymous()

于 2012-02-15T07:57:02.667 に答える
0

同じ問題がありました。しかし、問題は、ユーザー名が長すぎて、30文字に切り捨てられることでした。ここで答えを見つけました:

Django登録フォーム'AnonymousUser'オブジェクトには属性'backend'がありません

于 2012-03-08T16:51:21.357 に答える
0

これは、ユーザーが認証されなかった場合に発生します。バックエンドのログ記録に同じフィールドを使用していることを確認してください...たとえば、私は電子メール (電子メールとパスワードを使用するバックエンド) でログを記録しているので、

django.contrib.auth.authenticate(username=username, password=password)

私なら

django.contrib.auth.authenticate(username=email, password=password)

バックエンドはこちら: http://www.micahcarrick.com/django-email-authentication.html

于 2014-10-04T03:28:24.643 に答える
0

データベースでレプリケーションを使用していて、マスター/デフォルト データベースへの書き込み中にリード レプリカから読み取りを行っている場合、これも原因となる可能性があるレプリケーション ラグがあるとします。認証がリードレプリカから読み取ろうとしている間、マスターに書き込みますが、その結果、ユーザーが見つかりません。

解決策は、ユーザー クエリにデフォルトのデータベースを使用するようにルーターを設定することです。

于 2016-02-11T20:01:08.707 に答える