Django 上級初心者はこちら。私はこれを理解しようとして頭を壁にぶつけています。contrib.authに関連付けられた twython_django_oauth を使用してユーザーを登録およびログインする単純な webapp があります。(私はtwythonを変更せずにそのまま使用しています。) 問題なく Twitter 経由で新しいユーザーを登録でき、ログイン ユーザーとしてアプリに戻ります。ただし、その後ユーザーにログインしようとすると、次のエラーが返されます。
Traceback:
File "/app/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
111. response = callback(request, *callback_args, **callback_kwargs)
File "/app/thislist/twython_django_oauth/views.py" in thanks
80. login(request, user)
File "/app/lib/python2.7/site-packages/django/contrib/auth/__init__.py" in login
82. request.session[BACKEND_SESSION_KEY] = user.backend
Exception Type: AttributeError at /thanks
Exception Value: 'AnonymousUser' object has no attribute 'backend'
私が気付いた 1 つの異常は、この問題が発生した登録ユーザーの Twitter アカウントで、webapp が承認済みとして 2 回表示されることです。ちなみに、これは数週間前にはすべてうまく機能しているように見えました。問題なくログインできる Twitter ユーザーが 2 人登録されています。これらのアカウントでは、アプリは 1 回だけ承認されているように見えます。ただし、問題の原因となった可能性のある変更を特定するために、これらのユーザーが登録した時点までアプリをダイヤルバックできないようです。ユーザーが適切な資格情報で登録されているように見えるにもかかわらず、ここのワークフローが AnonymousUser を返す理由について誰かが洞察を持っている場合は、ご連絡いただければ幸いです。
更新:問題の原因を突き止めました。ユーザーが Twitter 資格情報を正常に入力した後、アプリにリダイレクトされるたびに、twython_django は、登録時に生成され、webapp の Twitter プロファイル データベースに保存されているシークレット トークンを取得するのではなく、新しい 'oauth_token_secret' を使用してユーザーをログインさせようとします。その結果、django はユーザーを認証できません。問題は、なぜこれが
try:
user = User.objects.get(username = authorized_tokens['screen_name'])
保存されたシークレット トークンを使用してユーザー オブジェクトを生成します。