From 057af6aedb7d3bb8fc7e262c1746839777c1111c Mon Sep 17 00:00:00 2001 From: =?utf8?q?Mat=C3=ADas=20Aguirre?= Date: Mon, 29 Aug 2011 14:39:18 -0300 Subject: [PATCH] Improve error handling. Closes gh-136 --- social_auth/views.py | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/social_auth/views.py b/social_auth/views.py index 64a82e7..6a7243b 100644 --- a/social_auth/views.py +++ b/social_auth/views.py @@ -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 -- 2.39.5