¡Autentica tu web con Zend_Auth!

La autenticación consiste en determinar si la persona que intenta acceder a tal o cual sistema pertenece efectivamente a dicho sistema y es quien dice ser. Zend_Auth es el componente de Zend Framework programado para este fin.

Llave segura

Este componente es muy flexible porque permite trabajar con diferentes fuentes de datos: servidores LDAP, ficheros de texto, tablas de bases de datos relacionales, etc.

Por favor, consulta el manual de Zend Framework para obtener una visión general acerca del funcionamiento de Zend_Auth. También puedes consultar el post de programarivm.com ACL con Zend_Acl y MySQL. ¡Persiste tu lista de control de acceso en la BBDD y cárgala luego en la memoria! para ampliar este tema.

Sin más preámbulos, hoy comparto con vosotr@s un script PHP genérico con el correspondiente formulario de acceso para implementar la autenticación. Se utiliza Zend_Auth. El vehículo de almacenamiento de datos es MySQL.

<?php 
 
require_once '../config.php';
 
if (!empty($_POST)) {
 
    $dbAdapter = Zend_Db::factory('PDO_MYSQL', array (
        'host' => DB_SERVER, 
        'username' => DB_USER, 
        'password' => DB_PASSWORD, 
        'dbname' => DB_NAME)); 
 
    $authAdapter = new Zend_Auth_Adapter_DbTable($dbAdapter);  
 
    $authAdapter->setTableName('users')
        ->setIdentityColumn('email')
        ->setCredentialColumn('password')
        ->setCredentialTreatment('MD5(?)')
        ->setIdentity($_POST['email'])
        ->setCredential($_POST['password']);             
 
    $auth = Zend_Auth::getInstance();
 
    $result = $auth->authenticate($authAdapter);
     
    $result->isValid() 
        ? header('Location: http://' . BASE_URL . '/cpanel/home/inicio/es')    
        : header('Location: http://' . BASE_URL . '/cpanel/login');
 
    exit;     
} 
?>
 
<!DOCTYPE html>
<html lang="es" >
<head>
    <title>Panel de administración</title>
    <meta charset="utf-8" />
    <base href="http://<?php echo BASE_URL;?>" />
    <link href="public/css/general.css" rel="stylesheet" type="text/css" />
    <link href="public/css/cpanel/login.css" rel="stylesheet" type="text/css" />
    <script type="text/javascript" src="public/js/jquery.js"></script>
    <script type="text/javascript">         
        $(function() {             
            $('#login-wrapper').fadeIn(750);             
        });         
    </script>
</head>
<body>   
    <div id="login-wrapper">
        <div id="header">
            <a href="http://<?php echo BASE_URL; ?>"><img class="logo-login" src="public/img/logo-black.png" alt="Logo" /></a>
        </div>
        <form id="login-form" action="cpanel/login" method="post">
            <div class="form-field">
                <label>Email:</label>
                <input type="text" name="email"/>
            </div>
            <div class="form-field">
                <label>Password:</label>
                <input type="password" name="password"/>
            </div>
            <div class="form-field">
                <label class="form-field"></label>
                <input class="send-button" type="submit" value="Acceder"></input>
            </div>
        </form>
    </div>
</body>
</html>