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)