- Published May 10, 2009
- Tags: autoryzacja clickpass django rpx
RPX jest podobną usługą do clickpass - upraszcza logowanie z systemów gdzie użytkownicy już mają konta. Zasada działania jest bardzo podobna. System ten również opiera się o OpenID.
Istnieje także implementacja rpx dla django - http://code.google.com/p/django-newrpx/
rpx wydaje się lepsze od clickpass, z tego względu że użytkownik dużo łatwiej się może zalogować, praktycznie po autoryzacji w systemie zewnętrznym jest już zalogowany, przy clickpass po autoryzacji pokazuje się formularz rejestracyjny z wypełnionymi danymi( typu: email, opcjonalnie imię, nazwisko) i trzeba ręcznie wpisać nazwę użytkownika jaki będzie utworzony. W rpx się tego nie robi, wszystko się dzieje z automatu, nazwa użytkownika jest z automatu przekazywana(z systemu w którym wcześniej odbyła się autoryzacja) do backend’u autoryzacji który sam tworzy nowego użytkownika i go loguje. Przy następnym logowaniu backend sprawdza czy login użytkownika(przekazany np. z google accounts) istnieje już i go loguje. W jednym i drugim przypadku logowanie to tak naprawdę 2-3 kliknięcia myszą.
Teraz na temat samej implementacji rpx w django
Pakiet django-newrpx był dosyć z bugowany – parę drobnych bugów w kodzie, udało mi się wszystko popoprawiać i wysłać pacha do autora. W django-newrpx w przeciwieństwie do django-clickpass nie ma zaimplementowanego tzn "account merge"(samo rpx obsługuje tą opcje- Mapping API) jest to sytuacja kiedy użytkownik ma już konto na danym serwisie i chciałby skojarzyć że loguje się np. przez google accounts do tego właśnie konta. Autor django-rpx obiecuje zaimplementować także Mapping API w najbliższym czasie
Na stronie rpx pisze że teoretycznie są dostępne tłumaczenia, jednak przy próbie zmiany wersji językowej ciągle jest angielski – jednak oznacza to pewnie w końcu te tłumaczenia zaczną działać skoro opisują to w dokumentacji.
W rpx dostępne są 3 rodzaje kont, tylko podstawowe - basic jest darmowe, z zauważalnych różnic miedzy tylko kontami a clickpass jest taka że w clickpass tzn trust root jest nasza domena, a w rpx nasza domena może być trust root tylko w wersji płatnej, w wersji podstawowej trust root jest w formie domena-com.rpxnow.com. Jest to nazwa która będzie pokazywana po zalogowaniu na zewnętrznym serwisie(np. google) przy pytaniu o udostępnienie podstawowych danych do zalogowania - e-mail, nazwa użytkownika.
Wydaje mi się że mimo wszystko warto wybrać rpx, ponieważ jeszcze bardziej upraszcza autoryzacje użytkowników. Także konfiguracja samego django-rpx jest dużo prostsza niż clickpass.
Wystarczą 3 wpisy w settings.py oraz jedna linia w szablonie i już gotowe - działa :)
Wadą rpx jest że nie ma w wersji bezpłatnej możliwości ustawienia trust root na własną domenę.
- Published April 7, 2009
- Tags: autoryzacja clickpass django
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/'