API:Login/de/1 Beispiel

From mediawiki.org
< API:Login‎ | de

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)