python-social-auth AuthCanceled异常

 塑料调色cz 发布于 2023-02-06 18:16

我在我的Django应用程序中使用python-social-auth通过Facebook进行身份验证.但是当用户尝试登录并且当它被重定向到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?

3 个回答
  • python-social-auth是一个较新的派生版本django-social-auth.

    可以稍微修改AlexYar的答案,python-social-auth通过settings.py以下更改进行修改:

      添加中间件来处理SocialAuthException

      MIDDLEWARE_CLASSES += (
          'social.apps.django_app.middleware.SocialAuthExceptionMiddleware',
      )
      

      发生异常时要重定向到的URL

      SOCIAL_AUTH_LOGIN_ERROR_URL = '/'
      

      请注意,您还需要设置

      DEBUG = False
      

    这是全部或阅读http://python-social-auth.readthedocs.org/en/latest/configuration/django.html#exceptions-middleware

    2023-02-06 18:17 回答
  • 这是@Nicolas答案的略微修改,这对我有用.

    middleware.py

    from social.apps.django_app.middleware import SocialAuthExceptionMiddleware
    from django.shortcuts import render
    from social.exceptions import AuthCanceled
    
    class SocialAuthExceptionMiddleware(SocialAuthExceptionMiddleware):
        def process_exception(self, request, exception):
            if type(exception) == AuthCanceled:
                return render(request, "pysocial/authcancelled.html", {})
            else:
                pass
    

    settings.py

    MIDDLEWARE_CLASSES += (
    'myapp.middleware.SocialAuthExceptionMiddleware',
    )
    

    2023-02-06 18:18 回答
  • 您可以创建一个中间件并捕获任何异常,例外列表:https://github.com/omab/python-social-auth/blob/master/social/exceptions.py 在这种情况下您的AuthCanceled Exception.

    middleware.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
    
    
    

    settings.py

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

    2023-02-06 18:18 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有