2

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'])

保存されたシークレット トークンを使用してユーザー オブジェクトを生成します。

4

2 に答える 2

0

私は Twython (および関連する Twython-Django パッケージ) の作成者です。

私はあなたの質問を少し見てきましたが、問題が何であるかについて少し迷っています。これは私が聞いた最初のものであり、これに影響を与える Django の最近のリリースでは何も変更されていないと思います (authenticate() と関連を再確認して確認しました...)。

喜んでデバッグのお手伝いをさせていただきます。簡単な健全性チェックとして、コンソールを開いて、サンプル データを使用して手動で authenticate() を実行してみましたか? 最終的に、それが AnonymusUser の問題を引き起こしているようです。問題は実際には try/except ではないため、ここで範囲を狭めると役立ちます。ユーザーが DB に存在するかどうかを確認し、存在しない場合はそれらを作成するだけです。認証にはまったく関係ありません。:)

デバッグのお手伝いができるかどうかお知らせください。さらにサポートが必要な場合は、お気軽にお問い合わせください。

于 2012-01-08T22:42:21.450 に答える