30

Facebook経由の認証のために、Djangoアプリケーションでpython-social-authを使用しています。しかし、ユーザーがログインしようとすると、Facebook アプリ ページにリダイレクトされ、[キャンセル] ボタンをクリックすると、次の例外が表示されます。

ERROR 2014-01-03 15:32:15,308 base :: Internal Server Error: /complete/facebook/
Traceback (most recent call last):
  File "/home/vera/virtualenv/myapp/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 114, in get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/vera/virtualenv/myapp/local/lib/python2.7/site-packages/django/views/decorators/csrf.py", line 57, in wrapped_view
    return view_func(*args, **kwargs)
  File "/home/vera/virtualenv/myapp/local/lib/python2.7/site-packages/social/apps/django_app/utils.py", line 45, in wrapper
    return func(request, backend, *args, **kwargs)
  File "/home/vera/virtualenv/myapp/local/lib/python2.7/site-packages/social/apps/django_app/views.py", line 21, in complete
    redirect_name=REDIRECT_FIELD_NAME, *args, **kwargs)
  File "/home/vera/virtualenv/myapp/local/lib/python2.7/site-packages/social/actions.py", line 54, in do_complete
    *args, **kwargs)
  File "/home/vera/virtualenv/myapp/local/lib/python2.7/site-packages/social/strategies/base.py", line 62, in complete
    return self.backend.auth_complete(*args, **kwargs)
  File "/home/vera/virtualenv/myapp/local/lib/python2.7/site-packages/social/backends/facebook.py", line 63, in auth_complete
    self.process_error(self.data)
  File "/home/vera/virtualenv/myapp/local/lib/python2.7/site-packages/social/backends/facebook.py", line 56, in process_error
    super(FacebookOAuth2, self).process_error(data)
  File "/home/vera/virtualenv/myapp/local/lib/python2.7/site-packages/social/backends/oauth.py", line 312, in process_error
    raise AuthCanceled(self, data.get('error_description', ''))
AuthCanceled: Authentication process canceled

Djangoを捕まえる方法はありますか?

4

7 に答える 7

45

python-social-authの新しい派生バージョンですdjango-social-auth

AlexYar の回答は、次の変更を加えpython-social-authて変更することで、動作するようにわずかに変更できます。settings.py

  1. SocialAuthException を処理するミドルウェアを追加する

    MIDDLEWARE_CLASSES += (
        'social.apps.django_app.middleware.SocialAuthExceptionMiddleware',
    )
    
  2. 例外が発生したときにリダイレクトする URL

    SOCIAL_AUTH_LOGIN_ERROR_URL = '/'
    
  3. も設定する必要があることに注意してください

    DEBUG = False
    

これですべてです。またはhttp://python-social-auth.readthedocs.org/en/latest/configuration/django.html#exceptions-middlewareを読んでください。

于 2014-08-19T16:11:52.230 に答える
21

ミドルウェアを作成して例外をキャッチできます。例外リスト: https://github.com/omab/python-social-auth/blob/master/social/exceptions.py この場合は AuthCanceled Exception です。

ミドルウェア.py



from social.apps.django_app.middleware import SocialAuthExceptionMiddleware
from django.shortcuts import HttpResponse
from social import exceptions as social_exceptions

class SocialAuthExceptionMiddleware(SocialAuthExceptionMiddleware):
    def process_exception(self, request, exception):
        if hasattr(social_exceptions, 'AuthCanceled'):
            return HttpResponse("I'm the Pony %s" % exception)
        else:
            raise exception


設定.py



MIDDLEWARE_CLASSES = (
        .....
        'pat_to_middleware.SocialAuthExceptionMiddleware',
)


于 2014-01-06T20:26:50.557 に答える