Django - autoryzacja przez Clickpass - tutorial
- Opublikowano April 7, 2009
- komentarze 3
Clickpass umożliwia proste logowanie użytkowników za pomocą kont które już posiadają w innych systemach, np. hotmail, yahoo, google, facebook, aim, clickpass lub OpenID. Zasadę działania opisywałem w poprzednim poście. Teraz pokaże jak zaimplementować to w Django. Korzystam z aplikacji która ostatnio udostępniło washingtontimes, a mianowicie django-clickpass. Jest to aplikacja która bardzo upraszcza wykorzystanie clickpass w django.
Instalacja
Zainstaluj django-openid:
svn co http://django-openid.googlecode.com/svn/trunk/django_openid django_openid
Zainstaluj paczkę python OpenID 2.2.1 - http://openidenabled.com/files/python-openid/packages/python-openid-2.2.1.tar.gz. Szczegółowe instrukcje znajdziesz tutaj: http://www.openidenabled.com/python-openid/
Dodaj django_openid do Twoich INSTALLED_APPS.
Zainstaluj django-clickpass:
svn co http://opensource.washingtontimes.com/projects/public/django-clickpass/trunk/clickpass clickpass
Dodaj clickpass do Twoich INSTALLED_APPS.
Do głównych urls.py dodaj from clickpass.consumer import ClickPassConsumer
Dodaj (r'^openid/(.*)', ClickPassConsumer()), do Twoich urlpatterns w urls.py:
Przykład urls.py, do dodaniu ClickPassConsummer:
from clickpass.consumer import ClickPassConsumer urlpatterns = patterns('', (r'^admin/(.*)', admin.site.root), (r'^moja_aplikacja/', include('moj_projekt.moja_aplikacja.urls')), (r'^openid/(.*)', ClickPassConsumer()), )
Dodaj clickpass.consumer.ClickPassConsumer do MIDDLEWARE_CLASSES gdzieś po django.contrib.sessions.middleware.SessionMiddleware, np:
Przykład:
MIDDLEWARE_CLASSES = ( 'django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'clickpass.consumer.ClickPassConsumer', 'django_openid.consumer.SessionConsumer', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.middleware.doc.XViewMiddleware', )
W szablonach możesz dodać przycisk clickpass za pomoca template tag'a clickpass_button_large* lub clickpass_button_small.
{% load clickpass %} {% if user.is_anonymous %} Zaloguj się {% clickpass_button_small %} {% else %} Zalogowano jako: {{user.first_name}} {{user.last_name}} {% endif %}
Możesz także napisać kilka domyślnych szablonów które używa django-openid. Szablony są w katalogu: django_openid/templates/django_openid
Konfiguracja konta clickpass
Załóż tzw. site key, na: www.clickpass.com/developer.
Krok 1 - Zarejestruj swoją domenę z nazwą oraz url'em.
Krok 2 - ustaw następujące wartości:
- OpenID trust root na http://www.twojadomena.com/
- begin_openid_login na http://www.twojadomena.com/openid/
- OpenID parameer label na openid_url
- Submission method na POST
Krok 3:
- begin_add_openid_to_user ustaw na http://www.twojadomena.com/openid/add_openid_to_user/
- user_id label ustaw na user_id
Krok 4:
- process_openid_registration_url na http://www.twojadomena.com/openid/register/
- new_openid_completion_url zostaw puste
- logo_url zostaw puste
- Wymagane pola zostaw puste
Dodaj następujące ustawienia do Twoich settings.py:
- CLICKPASS_SITE_KEY = Twój site key
- CLICKPASS_LOGO_URL = 'http://url do Twojego logo'
Uwagi
Uruchamiając django-clickpass na python'ie 2.4 miałem problem z python-openid. Jest tam bug związany z biblioteką hashlib. Aby rozwiązać problem należy nałożyć patcha dostępnego tutaj, lub uruchomić serwis na python'ie 2.5, gdzie owy błąd nie występuje.
Jeżeli chce się korzystać tylko z tej autoryzacji i używa się dekoratora login_required w widokach to należy pamiętać aby zmienić w settings.py LOGIN_URL na '/openid/'
Komentarze
Racja, jest to jakiś minus, być może za jakiś czas pojawią się jakieś lokalizacje, zobaczymy.
Minus (wielki, jak dla mnie) — clickpass nie ma strony przetłumaczonej na polski. Ale ogólnie, jak sprawdziłem przed momentem, działa. :)