API:Login/de/1 Beispiel
Beschreibung[edit]
Hier findest du eine ErklÀrung wie du mit MW 1.19.1 also mit PHP5
einen externen Login durchfĂŒhren kannst, wobei der Benutzer auf seine Seite
im MW gefĂŒhrt wird.
Nur die Webadressen (xxxxxxxxxxxxxxx) muĂ du mit den richtigen Werten auffĂŒllen.
Mit der Variable $test auf true kann du eine gewisse Hilfe bei der Fehlersuche bekommen.
NatĂŒrlich kannst du im Betrieb diesen Teil vom Code löschen.
Der Code wurde getestet und benutzt die MW Api.
Code[edit]
<?php
// login.php
// globale Variablen
// Mit $test kann im Fehlerfall der xml RĂŒckgabe-Status bei der Anmeldung und der Cookie-Status gelesen werden
// $test = true;
$test = false;
// URL zum Aufrufen der MediaWiki API
$mw_apisite = 'http://xxxxxxxxxxxxxxx/wiki/mediawiki/api.php';
// URL zum Aufrufen dieser Seite
$loginsite = 'http://xxxxxxxxxxxxxxx/wiki/login.php';
// URL zum Aufrufen der Startseite des Benutzers
$mw_startsite = 'http://xxxxxxxxxxxxxxx/wiki/mediawiki/index.php';
if(isset($_POST['lgbutton']))
{
$autologin = (!empty($_POST['autologin'])) ? true : false;
$username = ucfirst($_POST['lgname']);
$password = $_POST['lgpassword'];
// Login
$ch = curl_init($mw_apisite);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, "action=login&lgname=$username&lgpassword=$password&format=xml");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$xml = simplexml_load_string(curl_exec($ch));
$mw_result = $xml->login->attributes()->result;
$mw_token = $xml->login->attributes()->token;
$mw_prefix = $xml->login->attributes()->cookieprefix;
$mw_session = $xml->login->attributes()->sessionid;
setcookie("{$mw_prefix}UserName", $username, time()+3600*24*60, "/");
setcookie("{$mw_prefix}_session", $mw_session, time()+3600*24*60, "/");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_COOKIE, "{$mw_prefix}_session=$mw_session");
curl_setopt($ch, CURLOPT_POSTFIELDS, "action=login&lgname=$username&lgpassword=$password&lgtoken=$mw_token&format=xml");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$xmle = simplexml_load_string(curl_exec($ch));
// Bei einer erfolgreichen Anmeldung wird in $mw_resulte "Success" zurĂŒck geliefert
$mw_resulte = $xmle->login->attributes()->result;
// Cookie Bereinigung
if ($mw_resulte == "Success")
{ // Anmeldung erfolgreich
$mw_lguserid = $xmle->login->attributes()->lguserid;
setcookie("{$mw_prefix}UserID", $mw_lguserid, time()+3600*24*60, "/");
// LoggedOut Cookie löschen
setcookie("{$mw_prefix}LoggedOut", "", time()-3600, "/");
}
else
{ // Anmeldung nicht erfolgreich
// Cookies löschen
setcookie("{$mw_prefix}UserName", "", time()-3600, "/");
setcookie("{$mw_prefix}_session", "", time()-3600, "/");
setcookie("{$mw_prefix}UserID", "", time()-3600, "/");
}
curl_close($ch);
if ($test == true)
{
echo ('Benutzername: ' . $username . '<br>');
echo "-----------------------------------------<br>";
echo ('Ergebniss vom ersten MediaWiki API aufruf<br>');
echo ('1-result: ' . $mw_result . '<br>');
echo ('1-token: ' . $mw_token . '<br>');
echo ('1-cookieprefix: ' . $mw_prefix . '<br>');
echo ('1-sessionid: ' . $mw_session . '<br>');
echo "-----------------------------------------<br>";
echo ('Ergebniss vom zweiten MediaWiki API aufruf<br>');
foreach ($xmle->login->attributes() as $Name => $Wert)
echo "2-$Name => $Wert<br>";
echo "-----------------------------------------<br>";
// Die Werte der Cookies ist fĂŒr mich nicht nachvollziehbar
echo ('Anzeige der installierten Cookies<br>');
foreach ($_COOKIE as $Name => $Wert)
echo "$Name => $Wert<br>";
echo "-----------------------------------------<br><br>";
}
}
if(isset($_POST['lgbutton']))
{
unset($_POST['lgbutton']);
if ($mw_resulte == "Success")
{
// Anmeldug hat stattgefunden
OKButtom();
}
else
{
// Anmeldung hat nicht stattgefunden
ErrorMsg();
}
}
else
{
// Variablen löschen
$username = "";
$password = "";
$mw_result = "";
$mw_token = "";
$mw_prefix = "";
$mw_session = "";
$xml = "";
$xmle = "";
InputForm();
}
function ErrorMsg()
{
global $loginsite;
echo '<BR>BenutzerName oder Passwort sind falsch. <br>Es konnte keine Verbindung hergestellt werden.<BR><br>';
echo '<a href="' . $loginsite . '">Wiederholen</a><BR>';
}
function OKButtom()
{
global $mw_startsite;
global $username;
echo '<BR><BR>';
echo '<a href="' . $mw_startsite . '?title=Benutzer:' . $username . '">Nach MediaWiki</a><BR>';
}
function InputForm()
{
global $loginsite;
echo '.<BR>';
echo '.<BR>';
echo '<BR><BR>';
echo '<form method="POST" action="' . $loginsite . '">';
echo '<table>';
echo '<tr>';
echo ' <td colspan=2>Bitte Benutzername und Passwort eingeben.</td>';
echo '</tr>';
echo '<tr>';
echo ' <td align=right><label>Benutzername: </label></td>';
echo ' <td><input type="text" name="lgname" size="40" /></td>';
echo '</tr>';
echo '<tr>';
echo ' <td align=right><label>Password: </label></td>';
echo ' <td><input type="password" name="lgpassword" size="40" /></td>';
echo '</tr>';
echo '<tr>';
echo ' <td></td>';
echo ' <td align=right><input type="submit" value="Eingabe prĂŒfen" name="lgbutton" /></td>';
echo '</tr>';
echo '</form>';
}
?>
Gieselkalk (talk) 17:51, 4 August 2012 (UTC)