February 4th, 2009 Category: Zend Framework
4 Comments »
En los casos comunes de autenticaciones con Zend_Auth nosotros le pasamos un usuario y una clave, pero hay veces que necesitamos que valide por mas datos.
Una autenticacion comun seria la siguiente.
Zend_Loader::loadClass( 'Zend_Auth_Adapter_DbTable' );
$dbAdapter = Zend_Registry::get( 'dbAdapter' );
$authAdapter = new Zend_Auth_Adapter_DbTable( $dbAdapter );
$authAdapter->setTableName( 'SYS_USER' );
$authAdapter->setIdentityColumn( 'username' );
$authAdapter->setCredentialColumn( 'password' );
$authAdapter->setIdentity( strtolower( trim( $username )) );
$authAdapter->setCredential( md5( $passwd ));
$auth = Zend_Auth::getInstance();
$result = $auth->authenticate( $authAdapter );
Pero que pasa si ademas necesitamos validar si el usuario esta o no activo en el sistema, o si no esta suspendido temporalmente?
Nososotros podemos pasarle un parametro extra a Zend_Auth_Adapter_DbTable, para que filtre por mas datos.
Por ejemplo el caso anterior, quedaria de la siguiente manera si ademas nosotros queremos saber si el campo status = ‘A’
Zend_Loader::loadClass( 'Zend_Auth_Adapter_DbTable' );
$dbAdapter = Zend_Registry::get( 'dbAdapter' );
$authAdapter = new Zend_Auth_Adapter_DbTable( $dbAdapter, 'SYS_USER', 'username', 'password', "MD5( ? ) AND status = 'A' " );
$authAdapter->setIdentity( strtolower( trim( $username )) );
$authAdapter->setCredential( md5( $passwd ));
$auth = Zend_Auth::getInstance();
$result = $auth->authenticate( $authAdapter );
De esta forma, cada vez que intentemos loguearnos nos va a encriptar la clave con la funcion MD5, y preguntar si status =’A’.
Si ustedes no necesitan encriptar la clave pueden usar directamente el signo de pregunta sin la funcion MD5, tambien pueden agregar mas funcionalidades, para mas detalle mirar la documentacion oficial
En el administrador del blogzf tenemos un ejemplo de implementacion de este sistema.


