previousAuth (Previous) (Next) Auth Optionsnext

View this page in Last updated: Sun, 18 Oct 2009
English | Brazilian Portuguese | Chinese | Dutch | French | German | Hungarian | Japanese | Polish | Russian | Spanish | Turkish

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.

previousAuth (Previous) (Next) Auth Optionsnext

Download Documentation Last updated: Sun, 18 Oct 2009
Do you think that something on this page is wrong? Please file a bug report or add a note.
User Notes:
Note by: cronimson@yahoo.com
example does not work and i have in the internet for examples and all of them does not work also. can someone post a working sample.. this is frustrating.
Note by: wiesemann
@shelleykm..., please use the support offers on pear.php.net for asking support questions. About the usage of DB here: The example is just a little bit older. If you have suggestions about how it could be improved, please open a bug report via the link that is offered on the footer of this page (next to the link that you've used to file your user note).
Note by: wiesemann
@ts..., the comma isn't needed, that's right. But this isn't an error. PHP accepts the comma, and it makes people's life easier in some sense because you don't have to worry about adding the comma if you add another key/value pair to the $options array.
Note by: ts@websafe.pl
Isn't there an error?

$options = array(
'dsn' => "mysql://user:password@localhost/database",
);

right after /database", the comma is not needed, or am I wrong?
Note by: shelleykm@adelphia.net
Thanks to the above poster for the encryption hint. Unfortunately I don't have it working yet.

Also, why is the "DB" connector listed here? In the PEAR doc it even says DB has been deprecated in favor of MDB2. Why give newbies examples with includes that aren't recommended to use anymore?
Note by: Mario
Just adding one clarification for newbies (as I am).

If you want to test the 2 examples, don't forget that the password in your table must be encrypted.