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
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):
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()
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 \
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: