HowTo: Ein Login für mehrere Tools (PHPBB, Wiki, etc...)
Verfasst: 30.08.2006 09:50
Hallo!
Da ich gerade dieses Problem für mich gelöst habe, stelle ich die Lösung mal hier rein falls es jemanden interessiert.
Da wir einen Mitgliederbereich haben, der aus mehreren verschiedennen Applikationen besteht, ist das problem aufgetreten, dass der Benutzer sich unzählige Male anmelden mus um den Bereich zu nutzen.
Meine Lösung bezieht sich im Moment auf PHPBB und MediaWiki, ist aber auf sämtliche Logins auf dem Server anwendbar!
Voraussetzung ist, dass bei allen Logins die gleichen Benutzer vorhanden sind. (für Wiki gibts da die
PHPBB-Users_Integration)
Für das synchronisieren der Benutzertabellen werde ich später mal noch ein Skript schreiben...
Vom Prinzip her ist der Login sehr simpel: wir erstellen ein Login Formular, und beim absenden simuliert PHP allen logins, dass die Daten von "ihrem eigenen" Formular kämen.
Als erstes erstellen wir ein Login-Formular, typischerweise mit den Feldern "benutzer", "passwort" und "autologin".
Vom verarbeitungsskript aus müssen wir nun mehrere POST-anfragen starten. Da dies mit PHP relativ kompliziert ist, holt man sich am besten die PHP Snoopy-Klasse: http://sourceforge.net/projects/snoopy/
nach einbinden der Klasse, müssen wir einige Variablen definieren:
Die Werte können alle vom Original Loginformular des Tools (in diesem Fall Wiki) genommen werden (die Eingabefeldnamen und das Formular-Ziel)
nun muss das ganze nur noch abgesendet werden:
Die Login Prozedur des Wikis hat nun, sofern Benutzer und Passwort stimmten, eine Session gestartet.
Um den Benutzer zu erkennen wird beim Login immer ein Cookie gesetzt. Da wir die Anfrage aber nur simuliert haben, ist dieses Cookie auch nicht beim eigentlichen Benutzer gesetzt worden; es befindet sich noch immer in einer Variable der Snoopy-klasse und muss nun noch beim Benutzer gesetzt werden:
Somit ist der Login beendet: wenn man nun das Wiki besucht, ist man schon eingeloggt. Das kann nacheinander für beliebig viele Logins wiederholt werden!
hier noch das Ganze im Zusammenhang:
Da ich gerade dieses Problem für mich gelöst habe, stelle ich die Lösung mal hier rein falls es jemanden interessiert.
Da wir einen Mitgliederbereich haben, der aus mehreren verschiedennen Applikationen besteht, ist das problem aufgetreten, dass der Benutzer sich unzählige Male anmelden mus um den Bereich zu nutzen.
Meine Lösung bezieht sich im Moment auf PHPBB und MediaWiki, ist aber auf sämtliche Logins auf dem Server anwendbar!
Voraussetzung ist, dass bei allen Logins die gleichen Benutzer vorhanden sind. (für Wiki gibts da die
PHPBB-Users_Integration)
Für das synchronisieren der Benutzertabellen werde ich später mal noch ein Skript schreiben...
Vom Prinzip her ist der Login sehr simpel: wir erstellen ein Login Formular, und beim absenden simuliert PHP allen logins, dass die Daten von "ihrem eigenen" Formular kämen.
Als erstes erstellen wir ein Login-Formular, typischerweise mit den Feldern "benutzer", "passwort" und "autologin".
Vom verarbeitungsskript aus müssen wir nun mehrere POST-anfragen starten. Da dies mit PHP relativ kompliziert ist, holt man sich am besten die PHP Snoopy-Klasse: http://sourceforge.net/projects/snoopy/
nach einbinden der Klasse, müssen wir einige Variablen definieren:
Code: Alles auswählen
$url = "http://www.meinedomain.ch/wiki/index.php?title=Spezial:Userlogin&action=submitlogin&returnto=Hauptseite";
$vars["wpName"] = $benutzer;
$vars["wpPassword"] = $passwort;
$vars["wpRemember"] = $autologin;
$vars["wpLoginattempt"] = 'Anmelden';
nun muss das ganze nur noch abgesendet werden:
Code: Alles auswählen
$snoopy = new Snoopy();
$snoopy->submit($url, $vars);
Um den Benutzer zu erkennen wird beim Login immer ein Cookie gesetzt. Da wir die Anfrage aber nur simuliert haben, ist dieses Cookie auch nicht beim eigentlichen Benutzer gesetzt worden; es befindet sich noch immer in einer Variable der Snoopy-klasse und muss nun noch beim Benutzer gesetzt werden:
Code: Alles auswählen
//Cookies beim User registrieren
foreach($snoopy->cookies as $key=>$value){
setcookie($key, $value ,time()+3600,'/');
}
hier noch das Ganze im Zusammenhang:
Code: Alles auswählen
<?php
include("Snoopy/Snoopy.class.php"); //Zugriffsklasse um Browser zu "simulieren"
/***************************************************************************
* Login in Wiki
***************************************************************************/
//Formularfelder als Variablen an die Loginseite schicken
$url = "http://www.meinedomain.ch/wiki/index.php?title=Spezial:Userlogin&action=submitlogin&returnto=Hauptseite";
$vars["wpName"] = $benutzer;
$vars["wpPassword"] = $passwort;
$vars["wpRemember"] = $autologin;
$vars["wpLoginattempt"] = 'Anmelden';
$snoopy = new Snoopy();
$snoopy->submit($url, $vars);
//print($snoopy->results); //Rückgabe der Loginseite
//Cookies beim User registrieren
foreach($snoopy->cookies as $key=>$value){
setcookie($key, $value ,time()+3600,'/');
}
/***************************************************************************
* Login in Wiki Ende
***************************************************************************/
/***************************************************************************
* Login in Forum
***************************************************************************/
//Formularfelder als Variablen an die Loginseite schicken
$url = "http://www.meinedomain.ch/forum/login.php";
$vars["username"] = $benutzer;
$vars["password"] = $passwort;
$vars["autologin"] = $autologin;
$vars["login"] = 'Login';
$snoopy = new Snoopy();
$snoopy->submit($url, $vars);
//print($snoopy->results);//Rückgabe der Loginseite
//Cookies beim User registrieren
foreach($snoopy->cookies as $key=>$value){
setcookie($key, $value ,time()+3600,'/');
}
/***************************************************************************
* Login in Forum Ende
***************************************************************************/
?>