Die modifizierte Django Middleware für Facebook Connect stellt einen einfachen Weg zur Einbindung des Single-Sign-ons von Facebook für Django-Applikationen bereit.
Ab sofort bietet diese Site auch wieder die Möglichkeit, sich per Facebook Login anzumelden. Dazu wurde die bishlang genutzte Django Facebook Middleware Klasse so modifiziert, dass diese die neue Facebook Graph API, das Facebook Python SDK und das Facebook JavaScript SDK verwendet.
Vorbereitungen: Python SDK und JavaScript SDK
Das hört sich jedoch komplizierter an als es ist. Zunächst muss das Facebook Python SDK installiert werden, da dies von der Middleware-Klasse vorausgesetzt wird. Nach dem Entpacken reicht dazu das übliche Kommando python setup.py install. Für das JavaScript SDK ist keine Installation notwendig, die entsprechende Datei wird einfach direkt referenziert. Weitere Dokumentation befindet sich auf der Facebook JavaScript Connect SDK Seite.
Um den JavaScript-Teil einzubinden, wurde das Beispiel wenig modifiziert, so dass es von jQuery eingebunden wird. Dazu kommt die Darstellung des Facebook Anmelde-Buttons, welcher einfach per FBML integriert wird. Die Website muss natürlich zuvor bei Facebook angemeldet worden sein, um die entsprechende Anwendungs-ID bzw. API-Key und Application Secret zu erhalten.
Quellcode: HTML und JavaScript
Als Quellcode ist der HTML- und JavaScript-Teil hier zu finden: https://gist.github.com/396572.
Einbau ins Django Framework: Facebook Connect Middleware
Über die grundlegenden Funktionen des Django Middleware Konzeptes findet sich in der Django Dokumentation ausreichend Lesestoff, daher hier nur das Wesentliche. Die Facebook-Keys wurden als Konstanten in der settings.py definiert. Damit wird Unabhängigkeit der Anwendungs-Module von der Konfiguration erreicht.
Die Middleware-Klasse wird ebenfalls in der settings.py eingebunden, z.B. wie folgt:
MIDDLEWARE_CLASSES = ( [...] 'kuerbisorg.middleware.FacebookConnectMiddleware.FacebookConnectMiddleware', "django.contrib.auth.middleware.AuthenticationMiddleware", [...] )
Die Pfade sind je nach Speicherort entsprechend zu modifizieren, das Beispiel bezieht sich darauf, dass die Anwendung unter “kuerbisorg” zu finden ist.
Ein wenig Python Quellcode: Django Middleware
Nun fehlt nur noch die FacebookConnectMiddleware-Klasse an sich. Die Basis stellt die FacebookConnectMiddlware.py-Klasse dar. Diese wurde ein wenig angepasst, so dass die neue Facebook Graph API verwendet wird. Die Ablauflogik blieb hingegen weitestgehend gleich. Sofern ein gültiger Facebook Account vorliegt und die Verbindung gestattet ist, wird der Facebook Account als Django User gespeichert, falls noch nicht vorhanden. Bein Ausloggen wird der entsprechend Facebook-Cookie entfernt.
Die modifizierte Middleware-Klasse findet sich unter: https://gist.github.com/396557.
Fazit
Das war’s auch schon. Der Weg per Facebook Graph API ist somit wesentlich einfacher geworden, leichter verständlich und erfordert weniger Aufwand und geringere Modifikationen bei der Integration.