Facebook, Willkommen zurück!

Ab sofort besteht wieder die Möglichkeit, sich per Facebook auf dieser Site anzumelden.

Angesichts der Änderungen der API von Facebook funktionierte das Login per Facebook nicht mehr, weshalb ich es zunächst beim Update entfernt hatte. Mit ein paar kleineren Änderungen in der Django-Middleware und im Frontend-Code konnte das Facebook-Login wieder aktiviert werden.

Grundsätzlich funktioniert die Einbindung sehr ähnlich wie auf Facebook Connect Django Middleware mit Graph API beschrieben.

Die erste Änderung betraf die Verwendung des Facebook Python SDK. Zwar stellt Facebook dieses nicht mehr offiziell bereit, aber auf der Community-Ressouce Python for Facebook finden sich einige Quellen und Hinweise. Zunächst habe ich die Rest des alten SDK entfernt und durch die aktuelle Version ersetzt.

Des Weiteren wurde die Django Middleware ein wenig modifiziert und an die neue SDK-Version angepasst:

Der JavaScript-Code konnte sogar vereinfacht werden, nach erfolgreichem Login wird ein Reload durchgeführt, wodurch der Server die Authentifizierung starten kann. Dasselbe gilt beim Logout, zunächst wird per JavaScript-Funktion FB.logout() der User von Facebook abgemeldet, wonach die entsprechenden Cookies gelöscht sind, anschliessend erfolgt der Reload, so dass der Server seinerseits den Logout durchführen kann.

Beispiel des JavaScript-Codes:

Insgesamt ist die Einbindung von Facebook-Login zwar scheinbar einfach, aber der gesamte Prozess kann mit all seinen Zuständen durchaus komplex werden. Für Hinweise auf Fehler oder unvorhergesehenes Verhalten bin ich daher sehr dankbar.

Update 16.07.2012: Die Middleware ist noch einmal geändert worden. Der Fall dürfte zwar selten auftreten, aber: Ein User hat in einem Tab die Site geöffnet. In einem anderen loggt er sich per Facebook ein. Wenn nun versucht wurde, den normalen Anmeldeprozess per Site-Login durchzuführen, kam es zu einem Fehler. Nun wird dem Site-Login Vorrang vor dem Facebook-Login gewährt. D.h. in der genannten Situation wird der User als Site-User eingeloggt, nicht als Facebook-User. Beim bzw. nach dem Ausloggen tritt jedoch wieder das Facebook-Login in Kraft, falls der User noch bei Facebook eingeloggt ist und die Site geschke.name mit dem Facebook-Account verknüpft ist. Wie oben beschrieben – der gesamte Prozess ist nicht ganz tritival…

Update 25.04.2015: Der Beitrag bezieht sich auf die Facebook-Einbindung bei der damaligen geschke.name-Website.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Tags:
Kategorie: Programmierung