From 7418ec96d36ac3f690dcda9ca3531a20bfc50f7b Mon Sep 17 00:00:00 2001 From: =?utf8?q?Mat=C3=ADas=20Aguirre?= Date: Sun, 26 Feb 2012 15:06:11 -0200 Subject: [PATCH] Clean partial pipeline before auth process begins. Refs #271 --- social_auth/backends/__init__.py | 7 +++---- social_auth/utils.py | 8 ++++++++ social_auth/views.py | 6 +++++- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/social_auth/backends/__init__.py b/social_auth/backends/__init__.py index c71f921..ce762bf 100644 --- a/social_auth/backends/__init__.py +++ b/social_auth/backends/__init__.py @@ -26,7 +26,8 @@ from django.contrib.auth.backends import ModelBackend from django.utils import simplejson from django.utils.importlib import import_module -from social_auth.utils import setting, log, model_to_ctype, ctype_to_model +from social_auth.utils import setting, log, model_to_ctype, ctype_to_model, \ + clean_partial_pipeline from social_auth.store import DjangoOpenIDStore from social_auth.backends.exceptions import StopPipeline @@ -138,9 +139,7 @@ class SocialAuthBackend(ModelBackend): except StopPipeline: # Clean partial pipeline on stop if 'request' in kwargs: - name = setting('SOCIAL_AUTH_PARTIAL_PIPELINE_KEY', - 'partial_pipeline') - kwargs['request'].session.pop(name, None) + clean_partial_pipeline(kwargs['request']) break if isinstance(result, dict): diff --git a/social_auth/utils.py b/social_auth/utils.py index e0ab38c..a77f948 100644 --- a/social_auth/utils.py +++ b/social_auth/utils.py @@ -137,6 +137,14 @@ def ctype_to_model(val): return val +def clean_partial_pipeline(request): + """Cleans any data for partial pipeline.""" + name = setting('SOCIAL_AUTH_PARTIAL_PIPELINE_KEY', 'partial_pipeline') + # Check for key to avoid flagging the session as modified unnecessary + if name in request.session: + request.session.pop(name, None) + + if __name__ == '__main__': import doctest doctest.testmod() diff --git a/social_auth/views.py b/social_auth/views.py index 1419802..fa35359 100644 --- a/social_auth/views.py +++ b/social_auth/views.py @@ -16,7 +16,8 @@ from django.contrib import messages from django.views.decorators.csrf import csrf_exempt from social_auth.backends import get_backend -from social_auth.utils import sanitize_redirect, setting, log, backend_setting +from social_auth.utils import sanitize_redirect, setting, log, \ + backend_setting, clean_partial_pipeline DEFAULT_REDIRECT = setting('SOCIAL_AUTH_LOGIN_REDIRECT_URL') or \ @@ -133,6 +134,9 @@ def auth_process(request, backend): redirect = sanitize_redirect(request.get_host(), redirect) request.session[REDIRECT_FIELD_NAME] = redirect or DEFAULT_REDIRECT + # Clean any partial pipeline info before starting the process + clean_partial_pipeline(request) + if backend.uses_redirect: return HttpResponseRedirect(backend.auth_url()) else: -- 2.39.5