]> git.parisson.com Git - django-social-auth.git/commitdiff
Improve error handling. Closes gh-136
authorMatías Aguirre <matiasaguirre@gmail.com>
Mon, 29 Aug 2011 17:39:18 +0000 (14:39 -0300)
committerMatías Aguirre <matiasaguirre@gmail.com>
Mon, 29 Aug 2011 17:41:12 +0000 (14:41 -0300)
social_auth/views.py

index 64a82e76bc064978faa966c3f39603641721306a..6a7243bd3e356f06648226e9634b64433d400736 100644 (file)
@@ -19,9 +19,11 @@ from django.views.decorators.csrf import csrf_exempt
 from social_auth.backends import get_backend
 from social_auth.utils import sanitize_redirect
 
+
 def _setting(name, default=''):
     return getattr(settings, name, default)
 
+
 DEFAULT_REDIRECT = _setting('SOCIAL_AUTH_LOGIN_REDIRECT_URL') or \
                    _setting('LOGIN_REDIRECT_URL')
 NEW_USER_REDIRECT = _setting('SOCIAL_AUTH_NEW_USER_REDIRECT_URL')
@@ -35,6 +37,8 @@ SOCIAL_AUTH_LAST_LOGIN = _setting('SOCIAL_AUTH_LAST_LOGIN',
                                   'social_auth_last_login_backend')
 SESSION_EXPIRATION = _setting('SOCIAL_AUTH_SESSION_EXPIRATION', True)
 BACKEND_ERROR_REDIRECT = _setting('SOCIAL_AUTH_BACKEND_ERROR_URL')
+ERROR_KEY = _setting('SOCIAL_AUTH_BACKEND_ERROR', 'socialauth_backend_error')
+NAME_KEY = _setting('SOCIAL_AUTH_BACKEND_KEY', 'socialauth_backend_name')
 
 
 def dsa_view(redirect_name=None):
@@ -55,7 +59,17 @@ def dsa_view(redirect_name=None):
             if not backend:
                 return HttpResponseServerError('Incorrect authentication ' + \
                                                'service')
-            return func(request, backend, *args, **kwargs)
+
+            try:
+                return func(request, backend, *args, **kwargs)
+            except Exception, e:  # some error ocurred
+                if ERROR_KEY:
+                    # store error in session
+                    request.session[ERROR_KEY] = str(e)
+                if NAME_KEY:
+                    # store the backend name in the session for convenience
+                    request.session[NAME_KEY] = backend.AUTH_BACKEND.name
+                return HttpResponseRedirect(BACKEND_ERROR_REDIRECT)
         return wrapper
     return dec
 
@@ -63,18 +77,7 @@ def dsa_view(redirect_name=None):
 @dsa_view(COMPLETE_URL_NAME)
 def auth(request, backend):
     """Start authentication process"""
-    try:
-        return auth_process(request, backend)
-    except Exception, e:  # some Authentication error ocurred
-        error_key = getattr(settings, 'SOCIAL_AUTH_ERROR_KEY', None)
-        backend_name_key = _setting('SOCIAL_AUTH_BACKEND_KEY',
-                                    'social_auth_backend_name')
-        if error_key:  # store error in session
-            request.session[error_key] = str(e)
-        if backend_name_key:
-            # store the backend name in the session for convenience
-            request.session[backend_name_key] = backend.AUTH_BACKEND.name
-        return HttpResponseRedirect(BACKEND_ERROR_REDIRECT)
+    return auth_process(request, backend)
 
 
 @csrf_exempt