Available Languages
Manual for Zend Framework 1.0.3
Zend_Auth_Adapter_DbTable bietet die Möglichkeit sich gegenüber Zeugnissen zu
authentifizieren die in einer Datenbank Tabelle gespeichert sind. Weil
Zend_Auth_Adapter_DbTable eine Instanz von Zend_Db_Adapter_Abstract
benötigt, die an den Konstruktor übergeben wird, ist jede Instanz an eine spezielle Datenbank
Verbindung verknüpft. Andere Konfigurationsoptionen können durch den Konstruktor gesetzt werden und
durch die Methoden der Instanz. Eine für jede Option.
Die vorhandenen Konfigurationsoptionen beinhalten:
tableName: Das ist der Name der Datenbanktabelle welche die Authentifikations Zeugnisse enthält, und gegen die die Datenbank Authentifikations Abfrage durchgeführt wird.identityColumn: Ist der Name der Spalte der Datenbanktabelle die die Identität repräsentiert. Die Spalte der Identität muß eindeutige und einmalige Werte enthalten, wie einen Benutzernamen oder eine Email Adresse.credentialColumn: Das ist der Name der Spalte der Datenbanktabelle die verwendet wird um die Zeugnisse zu repräsentieren. Bei einem einfachen Identitäts und Passwort-Authentifizierungs Schema korrespondieren die Zeugnisse mit dem Passwort. Siehe auch diecredentialTreatmentOption.credentialTreatment: In vielen Fällen sind Passwörter und andere sensitive Daten verschlüsselt, gehasht, kodiert, verschleiert oder auf andere Weise durch irgendeine Funktion oder einen Algorithmus behandelt. Durch die Spezifikation eines parametrisierbaren Behandlungsstrings mit dieser Methode, wie'MD5(?)'oder'PASSWORD(?)', könnte ein Entwickler beliebiges SQL an den Eingabe- Zeugnis-Daten anwenden. Da diese Funktionen der darunter liegenden RDBMS speziell gehören, sollte das Handbuch der Datenbank auf das Vorhandensein solcher Funktionen im eigenen Datenbank System geprüft werden.
Beispiel 3.3. Grundsätzliche Verwendung
Wie bereits in der Einführung beschrieben benötigt der Zend_Auth_Adapter_DbTable
Konstruktor eine Instanz von Zend_Db_Adapter_Abstract die als Datenbank Verbindung
fungiert zu welcher die Instanz des Authentifizierungs-Adapters gebunden ist. Zuerst sollte die
Datenbankverbindung erstellt werden.
Der folgende Code erstellt eien Adapter für eine In-Memory Datenbank, erstellt ein einfaches Datenbankschema, und fügt eine Zeile ein gegen die später eine Authentifizierungs-Abfrage durchgeführt werden kann. Dieses Beispiel benötigt die SQLite Erweiterung:
<?php
// Erstellt eine In-Memory SQLite Datenbankverbindung
require_once 'Zend/Db/Adapter/Pdo/Sqlite.php';
$dbAdapter = new Zend_Db_Adapter_Pdo_Sqlite(array('dbname' => ':memory:'));
// Erstellt eine einfache Datenbank-Erstellungs-Abfrage
$sqlCreate = 'CREATE TABLE [users] ( '
. '[id] INTEGER NOT NULL PRIMARY KEY, '
. '[username] VARCHAR(50) UNIQUE NOT NULL, '
. '[password] VARCHAR(32) NULL, '
. '[real_name] VARCHAR(150) NULL)';
// Erstellt die Tabelle für die Authentifizierungs Zeugnisse
$dbAdapter->query($sqlCreate);
// Erstellt eine Abfrage um eine Zeile einzufügen für die eine Authentifizierung erfolgreich sein kann
$sqlInsert = 'INSERT INTO users (username, password, real_name) '
. 'VALUES ("my_username", "my_password", "My Real Name")';
// Daten einfügen
$dbAdapter->query($sqlInsert);
With the database connection and table data available, an instance of
Zend_Auth_Adapter_DbTable may be created. Configuration option values may be passed to the
constructor or deferred as parameters to setter methods after instantiation:
<?php
require_once 'Zend/Auth/Adapter/DbTable.php';
// Configure the instance with constructor parameters...
$authAdapter = new Zend_Auth_Adapter_DbTable($dbAdapter, 'users', 'username', 'password');
// ...or configure the instance with setter methods
$authAdapter = new Zend_Auth_Adapter_DbTable($dbAdapter);
$authAdapter->setTableName('users')
->setIdentityColumn('username')
->setCredentialColumn('password');
An diesem Punkt ist die Instanz des Authentifizierungsadapters bereit um Authentifierungsabfragen
zu akzeptieren. Um eine Authentifierungsabfrage zu formulieren, werden die Eingabezeugnis Werte
dem Adapter vor dem Aufruf der authenticate() Methode, übergeben:
<?php
// Die Eingabezeugnis Werte setzen (z.B. von einem Login Formular)
$authAdapter->setIdentity('my_username')
->setCredential('my_password');
// Die Authentifizierungsabfrage durchführen, das Ergebnis speichern
$result = $authAdapter->authenticate();
Zusätzlich zum Vorhandensein der getIdentity() Methode über das Authentifizierungs
Ergebnisobjekt, unterstützt Zend_Auth_Adapter_DbTable auch das empfangen der
Tabellenzeile wenn die Authentifizierung erfolgeich war:
<?php
// Die Identität ausgeben
echo $result->getIdentity() . "\n\n";
// Die Ergebniszeile ausgeben
print_r($identity);
/* Ausgabe:
my_username
Array
(
[id] => 1
[username] => my_username
[password] => my_password
[real_name] => My Real Name
)
*/
Da die Zeile der Tabelle die Zeugnis Daten enthält ist es wichtig diese Werte gegenüber unberechtigten Versuchen abzusichern.
Standardmäßig gibt Zend_Auth_Adapter_DbTable die unterstützte Identität an das
Auth Objekt bei erfolgreicher Authentifizierung zurück. Ein anderes Verwendungs-Szenario, bei dem
Entwickler ein Identitäts Objekt, welches andere nützliche Informationen enthält, in den dauerhaften
Speichermechanismus von Zend_Auth abspeichern wollen, wird durch die Verwendung der
getResultRowObject() Methode gelöst die ein stdClass Objekt zurück gibt.
Der folgende Code Abschnitt zeigt diese Verwendung:
<?php
// Mit Zend_Auth_Adapter_DbTable authentifizieren
$result = $this->_auth->authenticate($adapter);
if ($result->isValid()) {
// Die Identität als Objekt speichern wobei nur der Benutzername und der echte Name zurückgegeben werden
$this->_auth->getStorage()->write($adapter->getResultRowObject(array('username', 'real_name'));
// Die Identität als Objekt speichern wobei die Passwort Spalte unterdrückt wird
$this->_auth->getStorage()->write($adapter->getResultRowObject(null, 'password'));
/* ... */
} else {
/* ... */
}
Welcome!
Welcome to ZFResource - The Resource for the Zend Framework.
As you see, the website is in still in progress. Many features ( like Code Directory, Code Samples, User written Tutorials, Examples and News,...) will be online in near future.
At the moment, you can search and browse the manual in your language of
choice. Don't forget to come back later to benefit from the new features.
Help Wanted:
We are still searching for people want to help building this site. If you want to see this website in your language or you have any suggestions for this site please send us an email
