Einführung

Einführung – Eine Beispielanwendung

Auth-Tutorial

Unser Ziel für dieses Mini-Tutorial ist es, ein System aufzusetzen, die Ihre Seite mit einer einfach zu benutzenden Authentifizierung versieht.

Am Anfang der zu sichernden Seite platzieren Sie folgenden Code:

Typische Benutzung von PEAR::Auth

<?php
require_once "Auth.php";

// Erwartet drei Argumente: der zuletzt übergebene Benutzername,
// die Authorisations-Zustand und das Auth-Objekt
// Sie werden in diesem einfachen Beispiel nicht verwendet --
// aber das sollte Sie nicht davon abhalten nützliche Dinge amit zu tun.
function loginFunction($username null$status null, &$auth null)
{
    
/*
     * Change the HTML output so that it fits to your
     * application.
     */
    
echo "<form method=\"post\" action=\"test.php\">";
    echo 
"<input type=\"text\" name=\"username\">";
    echo 
"<input type=\"password\" name=\"password\">";
    echo 
"<input type=\"submit\">";
    echo 
"</form>";
}

$options = array( 
 
'dsn' => 'mysql://user:password@localhost/database'
 
);
$a = new Auth("DB"$options"loginFunction");

$a->start();

if (
$a->checkAuth()) {
    
/*
     * The output of your site goes here.
     */
}
?>

Die wenigen Zeilen Code initialiseren die Authentifizierung.

Die erste Zeile im obigen Skript inkludiert die Datei aus dem PEAR-Verzeichnis. Es enthält alle notwendigen Code, um PEAR::Auth auszuführen. Als nächstes wird eine Funktion definiert, die das Login-Formular darstellt, mit dem sich ein Besucher der Seite anmelden muss. Sie können die HTML-Formatierungen beliebig ändern.

Da wir eine Datenbank benutzen wollen, um die Login-Daten zu überprüfen, benötigen wir einen korrekten DSN in der Variable $dsn. Er wird benutzt, um sich mit der Datenbank zu verbinden über PEAR::DB. Informationen zum Tabellenschema für die Datenbank oder für die Benutzung anderer Container finden Sie weiter unten.

Danach erzeugen wir das Auth-Objekt. Der erste Parameter gibt den zuverwendenen Speicher-Container an. Da wir eine Datenbank benutzen, übergeben wir DB. Der zweite Parameter ist der Verbindungsparameter für den Speicher-Container. Wir setzen hier den DSN ein. Der dritte Parameter ist der Name der Funktion. die das Login-Formular enthält.

Das Objekt wurde initialisiert und wir müssen prüfen, ob ein Benutzer angemeldet ist. Dazu rufen wir die Methde checkAuth() auf. Wenn sie TRUE zurückliefert, können wir den Inhalt der Seite weiter ausführen.

Optionale Authentifizierung

<?php
// In this test, the file is named "test.php".

require_once "Auth.php";

function 
loginFunction()
{
     
/*
      * Change the HTML output so that it fits to your
      * application.
      */
     
echo "<form method=\"post\" action=\"test.php?login=1\">";
     echo 
"<input type=\"text\" name=\"username\">";
     echo 
"<input type=\"password\" name=\"password\">";
     echo 
"<input type=\"submit\">";
     echo 
"</form>";
}

if (isset(
$_GET['login']) && $_GET['login'] == 1) {
     
$optional true;
} else {
     
$optional false;
}

$options = array(
 
'dsn' => 'mysql://user:password@localhost/database'
 
);
$a = new Auth("DB"$options"loginFunction"$optional);

$a->start();

echo 
"Everybody can see this text!<br />";

if (!isset(
$_GET['login'])) {
     echo 
"<a href=\"test.php?login=1\">Click here to log in</a>\n";
}

if (
$a->getAuth()) {
     echo 
"One can only see this if he is logged in!";
}
?>

Da sist ein kleines Beispiel für einen optionalen Login: Der letzte Parameter $optional des Auth-Konstrukturs kann auf TRUE oder FALSE gesetzt werden. Setzen Sie ihn auf FALSE, dann wird das Login-Formular nicht angezeigt und der Benutzer sieht nur den Text "Everybody can see this text!". Klickt er auf den Link im Text, wird die Seite erneut geladen, aber mit dem GET-Parameter login=1. Jetzt kann er im Formular seine Login-Daten eingeben. Wird er erfolgreich eingeloggt, dann kann er den Text "Everybody can see this text!" sehen und zusätzlich "One can only see this if he is logged in!".

Logout-Funktion

Das folgende Beispiel führt einen "Logout" aus für den aktuellen Benutzer und zeigt danach das Login-Formular erneut.

<?php
$myauth
->start();
if (
$_GET['action'] == "logout" && $myauth->checkAuth()) {
    
$myauth->logout();
    
$myauth->start();
}
?>

In der folgenden Passage betrachten wir die Methoden der Klasse PEAR::Auth genauer.

Diese SQL-Anweisungen (unter MySQL) erzeugen eine Tabelle mit dem Standardschema für die Authentifizierung:

CREATE TABLE auth (
   username VARCHAR(50) default '' NOT NULL,
   password VARCHAR(32) default '' NOT NULL,
   PRIMARY KEY (username),
   KEY (password)
);

Diese Tabelle und ihre Spaltenname sind erforderlich für eine funktionierende Authentifizerung über eine Datenbank notwendig. Wenn das Passwort per standardmäßig per MD5-Hash-Funktion kodiert wird, dann muss die Passwort-Spalte mindestens 32 Zeichen aufnehmen können. Wird eine andere Methode benutzt, wie z.B. DES ("UNIX crypt"), dann muss die Größe entsprechend angepasst werden.