Open Source mag sehr viele Vorteile haben, aber es gibt halt manchmal auch ein paar Nachteile. So habe ich in den letzten Tagen eine Multisite aufgesetzt. Diese ist insofern ein wenig speziell, als dass alle Sites einen gemeinsamen Benutzerstamm haben. Das lässt sich in Drupal sehr einfach machen, führt jedoch dazu, dass die Datenbank ziemlich aufgebläht wird (520 Tabellen in einer Datenbank). Zusätzliche Schwierigkeiten (eigentlich war das Vorherige keine wirkliche Schwierigkeit) war die Mehrsprachigkeit. Viele Modul werden von Amerikanern geschrieben… Mehrsprachigkeit ist dort nicht so entscheidend, wie dies hier in der Schweiz der Fall ist, daher gibt es immer wieder Konflikte mit Modulen, welche nicht für Mehrsprachigkeit ausgelegt sind.
Single Sign-on – Mit Tücken
Für das Szenario (gemeinsame Usertabelle) gibt es eigentlich ein hübsches kleines Modul, welches als stabile Version vorhanden ist. Single Sign-on bedeutet, dass sich der User auf einer Site einloggen kann und dann automatisch auf allen anderen Sites eingeloggt bleibt… eigentlich ziemlich praktisch aber funktioniert leider nicht ohne weiteres, da Drupal jeweils ein Cookie für den Login anlegen muss und dies dann natürlich für alle Domains angelegt werden muss.
Modul installiert, … schaut eigentlich alles gut aus. Doch dann: Etwas scheint nicht zu klappen. Und es klappt definitiv nicht. Cache 100x leeren, cron laufen lassen… alles mögliche, aber nichts scheint zu klappen 🙁
Ein Blick in die Issue Queue des Moduls… scheint aktiv zu sein, aber wird leider nicht gepflegt. Immerhin 1000+ Installationen und eine stabile Version, man könnte meinen, dass das Modul sicher funktionieren sollte… tut es aber definitiv nicht. Ich finde einen ersten fix in der Issue Queue… scheint eigentlich genau das Problem zu beheben, tut es aber nicht 🙁 Verzweiflung pur. Wie weiter? Ein eigenes Modul entwickeln? Nach einer richtigen Single Sign-on Lösung umsehen? Vielleicht gibts einen Konflikt mit einem anderen Modul? Fragen über Fragen… und vor allem Ratlosigkeit.
Nach 2-3 Stunden wahlloser Fehlersuche reisse ich mich nochmals zusammen und fange von vorne an mit Debuggen und installiere mir dazu eine lokale Multisite mit gemeinsamer Usertabelle. Single sign-on funktioniert wunderbar. Kein Problem, keine Fehler. Debugge mit xDebug, um die Logik zu verstehen, welche relativ kompliziert ist! Debugger hilft nicht wirklich weiter.
Zu guter letzt! Debuggen auf die traditionalle Art: print $vars. Langsam arbeite ich mich vor. Das geht, das geht, in diese Schleife geht er auch rein, hier auch gut…. o? Was ist hier los?
<!–?php
$op = isset($_POST['op']) ? $_POST['op'] : '';
if (function_exists('t') ? $op == t('Log in') : $op == 'Log in') {
// User is in the middle of logging in. Can't do the master/slave
// checking yet because the login process happens after this module
// called. Set a flag telling us to do the master/slave checking
// once the login process is done.
$_SESSION['singlesignon_just_loggged_in'] = true;
return;
}
?>
Scheint eigentlich auf den ersten Anblick alles ok zu sein, ist es aber nicht. Die Funktion t kann gar nicht aufgerufen werden, da diese noch gar nicht geladen ist. Daher wird einfach $op mit 'Log in' vergleichen (das ist der default Value des Login Knopfes). Aber was passiert bei einer Multisite??? Ha. Ja genau, dort ist natürlich der Login Knopf Einloggen oder etwas ähnliches. Tja, das war es dann auch schon gewesen. Diesen Fehler behoben, Cookies gelöscht und schon funktioniert es einwandfrei 🙂
Fazit
Was lernen wir daraus? Vieles:
- Wenn auf drupal.org ein Modul als stable markiert ist, heisst das noch lange nicht, dass es auch einfach so ohne nichts funktioniert! Es mag immer noch Situationen geben, die vom Maintainer nie ausprobiert wurden. Zudem kann ein Modul Maintainer jederzeit eine Version erstellen. Es gibt keine Qualitätskontrolle in dem Sinn, bzw. Qualitätskontrolle passiert durch die Community, aber das kann halt manchmal dauern… Entweder man setzt das Modul nicht ein, oder man muss halt selber ran an den Speck.
- Mehrsprachigkeit erhöht die Komplexität und dadurch den Aufwand massiv! Es gibt wahrscheinlich immer irgendwo ein unerwartetes Problem, bzw. eine Herausforderung 😉
Zum Glück konnte das Problem noch behoben werden, bevor ich schlafen gegangen bin… ich hätte glaube ich sonst noch Alpträume gehabt und die ganze Zeit nach einer Lösung gesucht. Ich habe wirklich schon an mir gezweifelt… aber, es lebe Drupal. Man lernt schlussendlich jeden Tag ein paar neue Sachen und Lernen ist ja nicht gratis… leider.