[snowy] Make openid error messages more friendly
- From: Jeff Schroeder <jschroeder src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [snowy] Make openid error messages more friendly
- Date: Wed, 3 Nov 2010 03:09:13 +0000 (UTC)
commit cbfb09f86aeee37ea52f9d79aa19a9ea7d172a98
Author: Leon Handreke <leon handreke gmail com>
Date: Sat Oct 23 01:42:23 2010 +0200
Make openid error messages more friendly
- Center error message above login page
- Display login errors above the login form
- Better error message when the OpenID endpoint was not found
accounts/templates/openid/login.html | 18 +++++++-----------
accounts/urls.py | 9 ++++-----
accounts/views.py | 27 +++++++++++++++++++++++++++
settings.py | 3 +++
4 files changed, 41 insertions(+), 16 deletions(-)
---
diff --git a/accounts/templates/openid/login.html b/accounts/templates/openid/login.html
index 1e05bd8..b21d670 100644
--- a/accounts/templates/openid/login.html
+++ b/accounts/templates/openid/login.html
@@ -18,20 +18,16 @@
{% block content %}
+{% if messages %}
+{% for message in messages %}
+<div{% if message.tags %} class="{{ message.tags }} center"{% endif %} style="color: red;">{{ message }}</div>
+<br />
+{% endfor %}
+{% endif %}
+
<div id="login-leftcolumn">
<h3>{% trans "Log in with your OpenID" %}</h3>
- {% if form.errors %}
- <p class="errors">{% trans "Please correct errors below:" %}<br />
- {% if form.openid_identifier.errors %}
- <span class="error">{{ form.openid_identifier.errors|join:", " }}</span>
- {% endif %}
- {% if form.next.errors %}
- <span class="error">{{ form.next.errors|join:", " }}</span>
- {% endif %}
- </p>
- {% endif %}
-
<form name="fopenid" action="{{ action }}" method="post">
<table>
<tr>
diff --git a/accounts/urls.py b/accounts/urls.py
index 8d2bd57..281b554 100644
--- a/accounts/urls.py
+++ b/accounts/urls.py
@@ -24,8 +24,7 @@ from django.conf.urls.defaults import *
from registration.views import activate
from registration.views import register
-from snowy.accounts.views import openid_registration
-
+import snowy.accounts.views
import django_openid_auth.views
urlpatterns = patterns('',
@@ -37,11 +36,11 @@ urlpatterns = patterns('',
# OpenID URLs
# names must not be altered because django_openid_auth has to reverse them
- url(r'^openid/login/$', django_openid_auth.views.login_begin,
+ url(r'^openid/login/$', snowy.accounts.views.openid_begin,
{'template_name': 'openid/login.html'}, name='openid-login'),
- url(r'^openid/complete/$', django_openid_auth.views.login_complete,
+ url(r'^openid/complete/$', snowy.accounts.views.openid_complete,
name='openid-complete'),
- url(r'^openid/registration/$', openid_registration,
+ url(r'^openid/registration/$', snowy.accounts.views.openid_registration,
name='openid_registration'),
# Registration URLs
diff --git a/accounts/views.py b/accounts/views.py
index bbe8e4e..f43fd99 100644
--- a/accounts/views.py
+++ b/accounts/views.py
@@ -21,6 +21,8 @@ from django.contrib.auth.forms import UserChangeForm, PasswordChangeForm
from django.contrib.auth.models import User
from django.contrib.auth import authenticate, login
from django.contrib.auth.decorators import login_required
+from django.core.urlresolvers import reverse
+from django.contrib import messages
from django.shortcuts import render_to_response
from django.http import HttpResponseRedirect, HttpResponseNotAllowed
@@ -31,6 +33,7 @@ from snowy.accounts.models import UserProfile
from snowy.accounts.forms import InternationalizationForm, OpenIDRegistrationFormUniqueUser, EmailChangeForm
from django_openid_auth import auth
+import django_openid_auth.views
def openid_registration(request, template_name='registration/registration_form.html'):
registration_form = OpenIDRegistrationFormUniqueUser(request.POST or None)
@@ -79,6 +82,30 @@ def openid_registration(request, template_name='registration/registration_form.h
{'form' : registration_form},
context_instance=RequestContext(request))
+def openid_begin(request, **kwargs):
+ """A wrapper view around the login_begin view in
+ django_openid_auth that features a nicer error display"""
+ return django_openid_auth.views.login_begin(request, render_failure=render_openid_failure,
+ **kwargs)
+
+def openid_complete(request, **kwargs):
+ """A wrapper view around the login_complete view in
+ django_openid_auth that features a nicer error page"""
+ return django_openid_auth.views.login_complete(request, render_failure=render_openid_failure,
+ **kwargs)
+
+def render_openid_failure(request, message, status=403, **kwargs):
+ """A wrapper view around the login page to display an error message above
+ the login form"""
+ # the most common error is a mistyped URL - make the error message less cryptic for this case
+ # TODO: Put this "error message correction" in a better place - maybe django_openid_auth
+ error_message = unicode(message)
+ if error_message.find("OpenID discovery error: Error fetching XRDS document:") > -1:
+ error_message = unicode(_("OpenID endpoint not found. Please check your OpenID."))
+
+ messages.add_message(request, messages.ERROR, _("Error logging in: ") + error_message)
+ return HttpResponseRedirect(reverse('openid-login'))
+
@login_required
def accounts_preferences(request, template_name='accounts/preferences.html'):
user = request.user
diff --git a/settings.py b/settings.py
index 16b7032..84f49c9 100644
--- a/settings.py
+++ b/settings.py
@@ -84,6 +84,7 @@ TEMPLATE_CONTEXT_PROCESSORS = (
'django.core.context_processors.i18n',
'django.core.context_processors.media',
'django.core.context_processors.request',
+ 'django.contrib.messages.context_processors.messages',
'snowy.core.context_processors.current_site',
)
@@ -92,6 +93,7 @@ MIDDLEWARE_CLASSES = [
'django.contrib.csrf.middleware.CsrfViewMiddleware',
'django.contrib.csrf.middleware.CsrfResponseMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
+ 'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.locale.LocaleMiddleware',
'snowy.accounts.middleware.LocaleMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
@@ -132,6 +134,7 @@ INSTALLED_APPS = [
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.humanize',
+ 'django.contrib.messages',
# External apps
'registration',
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]