]> git.parisson.com Git - django-social-auth.git/commitdiff
Clean partial pipeline before auth process begins. Refs #271
authorMatías Aguirre <matiasaguirre@gmail.com>
Sun, 26 Feb 2012 17:06:11 +0000 (15:06 -0200)
committerMatías Aguirre <matiasaguirre@gmail.com>
Sun, 26 Feb 2012 17:06:11 +0000 (15:06 -0200)
social_auth/backends/__init__.py
social_auth/utils.py
social_auth/views.py

index c71f92138ea0399019e2e1893805855619cf7e21..ce762bf83bd1bfeee479ae9cbdfd9f019e2c6ba9 100644 (file)
@@ -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):
index e0ab38c6431d021475452a8648cb8943d619a59d..a77f948561fb4b77c1b6241ca07087f64c3c8c2f 100644 (file)
@@ -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()
index 14198028c8e0492f3bd49019293646389d5f8a68..fa35359edd7fafd1eebba96eb705e820598e8329 100644 (file)
@@ -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: