Available Languages
Manual for Zend Framework 1.0.3
Zend_Auth_Adapter_DbTable fournit la possibilité d'authentifier sur la base de crédits stockés dans une table de base de données. Comme Zend_Auth_Adapter_DbTable requiert qu'une instance de Zend_Db_Adapter_Abstract soit fournie à son constructeur, chaque instance est liée à une connection de base de données particulière. Les autres options de configuration peuvent être réglées grâce au constructeur ou au travers de différentes méthodes, une pour chaque option.
Les options de configuration disponibles incluent :
tableName: il s'agit du nom de la table dans la base de données qui contient les crédits d'authentification, et against which the database authentication query is performed.identityColumn: il s'agit du nom de la colonne dans la table utilisée pour représenter l'identité. La colonne d'identité doit contenir une valeur unique, comme un "username" ou une adresse email.credentialColumn: il s'agit du nom de la colonne dans la table utilisée pour représenter le crédit. Dans le cas d'une simple authentification par identité / mot de passe, la valeur de crédit correspond au mot de passe. Voir aussi l'optioncredentialTreatment.credentialTreatment: dans la plupart des cas, les mots de passe et autres données sensibles sont encryptés, hachés, encodés, masqués, ou sinon traités à travers une fonction ou un algorithme. En spécifiant un traitement paramètrable de chaîne avec cette méthode, comme'MD5(?)'ou'PASSWORD(?)', un développeur peut appliquer un code SQL arbitraire sur les données fournies de crédit. omme ces fonctions sont spécifiques à chaque gestionnaire de base de données, vérifiez le manuel de la base de données pour vérifier la disponibilité de ces fonctions dans votre système.
Exemple 3.3. Utilisation basique
Comme expliqué dans l'introduction, le constructeur de Zend_Auth_Adapter_DbTable requiert une instance de Zend_Db_Adapter_Abstract qui est utilisée comme connection à la base de données à laquelle l'instance d'adaptateur d'authentification est liée. Avant tout, la connection à la base de donnée devrait être crée.
Le code suivant crée un adaptateur pour une base de données en mémoire, crée un schéma avec une table unique, et insère une ligne sur laquelle nous pouvons réaliser une requête d'authentification plus tard. Cet exemple requiert que l'extension PDO SQLite soit disponible :
<?php
// Crée une connection de base de données SQLite en mémoire
require_once 'Zend/Db/Adapter/Pdo/Sqlite.php';
$dbAdapter = new Zend_Db_Adapter_Pdo_Sqlite(array('dbname' => ':memory:'));
// Construit une requête de création de table
$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)';
// Crée la table de crédits d'authentification
$dbAdapter->query($sqlCreate);
// Construit la requête pour insérer une ligne pour laquelle
// l'authentification pourra réussir
$sqlInsert = 'INSERT INTO users (username, password, real_name) '
. 'VALUES ("my_username", "my_password", "My Real Name")';
// Insertion des données
$dbAdapter->query($sqlInsert);
Avec une coonection de base de données et des données disponibles dans la table, une instance de Zend_Auth_Adapter_DbTable peut être créée. Les valeurs d'options de configuration peuvent être fournies au constructeur ou en tant que paramètres aux méthodes de réglage après l'instanciation :
<?php
require_once 'Zend/Auth/Adapter/DbTable.php';
// Configure une instance avec des paramètres de constructeur...
$authAdapter = new Zend_Auth_Adapter_DbTable($dbAdapter, 'users', 'username', 'password');
// ...ou configure l'instance avec des méthodes de réglage
$authAdapter = new Zend_Auth_Adapter_DbTable($dbAdapter);
$authAdapter->setTableName('users')
->setIdentityColumn('username')
->setCredentialColumn('password');
A cet instant, l'instance de l'adaptateur d'authentification est prête à recevoir des requêtes d'authentification. Dans le but de réaliser une requête d'authentification, les valeurs des crédits requêtés sont fournies à l'adaptateur avant d'appeler la méthode authenticate() :
<?php
// Règle les valeurs d'entrées des crédits
// (en général, à partir d'un formulaire d'enregistrement)
$authAdapter->setIdentity('my_username')
->setCredential('my_password');
// Réalise la requête d'authentification, et sauvegarde le résultat
$result = $authAdapter->authenticate();
En plus de la disponibilité de la méthode getIdentity() pour récupérer l'objet du résultat d'authentification, Zend_Auth_Adapter_DbTable supporte aussi la récupération de la ligne de la table qui a réussi l'authetification :
<?php
// Affiche l'identité
echo $result->getIdentity() . "\n\n";
// Affiche la ligne de résultat
print_r($identity);
/* Affiche:
my_username
Array
(
[id] => 1
[username] => my_username
[password] => my_password
[real_name] => My Real Name
)
*/
Puisque la ligne de la table contient la valeur de crédit, il est important de garantir ces valeurs contre l'accès fortuit.
Par défaut, Zend_Auth_Adapter_DbTable retourne l'identité fournie à l'objet auth en cas d'authentification couronnée de succès. Un autre scénario d'utilisation, où les développeurs veulent stocker dans le mécanisme de stockage persistant du Zend_Auth un objet d'identité contenant d'autres informations utiles, est résolu en utilisant la méthode getResultRowObject() retournant un objet stdClass. Le petit bout de code suivant illustre cette utilisation :
<?php
// authentifie avec Zend_Auth_Adapter_DbTable
$result = $this->_auth->authenticate($adapter);
if ($result->isValid()) {
// stocke l'identité comme objet dans lequel seulement username et real_name sont retournés
$this->_auth->getStorage()->write($adapter->getResultRowObject(array('username', 'real_name'));
// stocke l'identité comme objet dans lequel la colonne password a été omis
$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
