-from django.conf import settings
from django.http import HttpResponseRedirect
from django.contrib.auth import logout as auth_logout
from django.contrib.auth.decorators import login_required
from django.template import RequestContext
from django.shortcuts import render_to_response
+from django.contrib.messages.api import get_messages
from social_auth import __version__ as version
def error(request):
"""Error view"""
- error_msg = request.session.pop(settings.SOCIAL_AUTH_ERROR_KEY, None)
+ messages = get_messages(request)
return render_to_response('error.html', {'version': version,
- 'error_msg': error_msg},
+ 'messages': messages},
RequestContext(request))
def logout(request):
{% block content %}
<div>
<p>Sorry but some error made you impossible to login.</p>
+
+ {% if messages %}
+ {% for msg in messages %}
+ <p class="error">{{ msg.message }} ({{ msg.extra_tags }})</p>
+ {% endfor %}
+ {% endif %}
{% if error_msg %}
<p>Details:</p>
<p class="error">{{ error_msg }}</p>
{% endif %}
+
<p>Please try again <a href="/">Home</a></p>
</div>
{% endblock %}
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')
+BACKEND_ERROR_REDIRECT = _setting('SOCIAL_AUTH_BACKEND_ERROR_URL',
+ LOGIN_ERROR_URL)
ERROR_KEY = _setting('SOCIAL_AUTH_BACKEND_ERROR', 'socialauth_backend_error')
NAME_KEY = _setting('SOCIAL_AUTH_BACKEND_KEY', 'socialauth_backend_name')
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
+ backend_name = backend.AUTH_BACKEND.name
+ msg = str(e)
+
+ if 'django.contrib.messages' in settings.INSTALLED_APPS:
+ from django.contrib.messages.api import error
+ error(request, msg, extra_tags=backend_name)
+ else:
+ if ERROR_KEY: # store error in session
+ request.session[ERROR_KEY] = msg
+ if NAME_KEY: # store the backend name for convenience
+ request.session[NAME_KEY] = backend_name
return HttpResponseRedirect(BACKEND_ERROR_REDIRECT)
return wrapper
return dec