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')
'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):
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
@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