J'utilise donc Zend_Auth pour authentifier les utilisateurs de mon site Web. Actuellement, ils ne peuvent se connecter qu'avec leur adresse électronique, mais je voudrais leur permettre de se connecter avec leur nom d'utilisateur.Zend_Auth - Être capable de se connecter avec un courriel et un nom d'utilisateur
Voici un code:
// prepare adapter for Zend_Auth
$adapter = new Zend_Auth_Adapter_DbTable($this->_getDb());
$adapter->setTableName('users');
$adapter->setIdentityColumn('email');
$adapter->setCredentialColumn('password_hash');
$adapter->setCredentialTreatment('CONCAT(SUBSTRING(password_hash, 1, 40), SHA1(CONCAT(SUBSTRING(password_hash, 1, 40), ?)))');
$adapter->setIdentity($request->getParam('email'));
$adapter->setCredential($request->getParam('password'));
Avis de la ligne:
$adapter->setIdentityColumn('email');
Comment puis-je ajouter nom d'utilisateur également là (colonne dans la base de données appelée nom d'utilisateur, aussi)?
MISE À JOUR:
Voilà comment je résolu ce problème:
$login = $request->getParam('email');
$validator = new Zend_Validate_EmailAddress();
if (false === $validator->isValid($login)) {
$u = $this->_getTable('Users')->getSingleWithUsername($login);
if (null === $u) {
throw new Exception ('Invalid login and/or password');
}
$login = $u->email;
}
// prepare adapter for Zend_Auth
$adapter = new Zend_Auth_Adapter_DbTable($this->_getDb());
$adapter->setTableName('users');
$adapter->setIdentityColumn('email');
$adapter->setCredentialColumn('password_hash');
$adapter->setCredentialTreatment('CONCAT(SUBSTRING(password_hash, 1, 40), SHA1(CONCAT(SUBSTRING(password_hash, 1, 40), ?)))');
$adapter->setIdentity($login);
$adapter->setCredential($request->getParam('password'));
Je l'ai résolu en utilisant le validateur d'adresse électronique dans le contrôleur à la place dans le formulaire. Consultez ma publication mise à jour. Je n'aime pas créer des filtres personnalisés et autres et cela fonctionne aussi bien. –