5.2 Autenticación

El texto original ha cambiado despues que la traduccion. Por favor ayundanos a reslover este differencia. Puedes:

Mas info sobre traduciones

Un sistema de autenticación de usuarios es una parte común de muchas aplicaciones web. En CakePHP hay muchas formas para autenticar usuarios, cada una de estas provee diferentes opciones. La esencia de componente de autenticación es comprobar si el usuario tiene una cuenta con el sitio. De ser así, el componente da al usuario acceso completo a sitio.

Este componente se puede combinar con el componente ACL (access control lists) para crear niveles más complejos de acceso al sitio. El componente ACL, por ejemplo, podría permitir acceso a un usuario a áreas publicas del sitio, mientras que concede a otro usuario acceso a porciones administrativas protegidas del sitio.

El AuthComponent de CakePHP se puede usar para crear un sistema fácil y rápidamente. Veamos como construir un sistema de autenticación simple.

Al igual que todos los componentes, se utiliza mediante la incorporación de 'Auth' a la lista de componentes en el controlador:

class FooController extends AppController {
    var $components = array('Auth');
  1. class FooController extends AppController {
  2. var $components = array('Auth');

O añadelo al AppController si todos tus controladores lo van a usar:

class AppController extends Controller {
    var $components = array('Auth');
  1. class AppController extends Controller {
  2. var $components = array('Auth');

Ahora, hay unas pocas convenciones en las que pensar cuando se usa el AuthComponent. Por defecto, el AuthComponent espera que se tenga una tabla llamada 'users' con campos llamados 'username' y 'password'. En algunos casos, las bases de datos no permiten usar 'password' como nombre de columna, mas tarde, veremos como cambiar el nombre por defecto de los campos para trabajar con nuestro propio entorno.

Vamos a crear nuestra tabla 'users' usando el siguiente SQL:

CREATE TABLE users (
    id integer auto_increment,
    username char(50),
    password char(50),
    PRIMARY KEY (id)
);
  1. CREATE TABLE users (
  2. id integer auto_increment,
  3. username char(50),
  4. password char(50),
  5. PRIMARY KEY (id)
  6. );

Algo a tener en cuenta a la hora de crear una tabla para almacenar todos los datos de autenticación del usuario es que el AuthComponent espera el valor del password almacenado esté encriptado en vez de estar almacenado en texto plano. Asegúrese de que el campo que utilizará para almacenar la contraseña sea suficientemente largo para almacenar el hash (40 caracteres para SHA1, por ejemplo).

Para la configuración más básica usted solo tiene que crear dos acciones en el controlador:

class UsersController extends AppController {

    var $name = 'Users';
    var $components = array('Auth'); //No es necesario si se declaro en el app controller

    /**
     *  El AuthComponent proporciona la funcionalidad necesaria
     *  para el acceso (login), por lo que se puede dejar esta función en blanco.
     */
    function login() {
    }

    function logout() {
        $this->redirect($this->Auth->logout());
    }
}
  1. class UsersController extends AppController {
  2. var $name = 'Users';
  3. var $components = array('Auth'); //No es necesario si se declaro en el app controller
  4. /**
  5. * El AuthComponent proporciona la funcionalidad necesaria
  6. * para el acceso (login), por lo que se puede dejar esta función en blanco.
  7. */
  8. function login() {
  9. }
  10. function logout() {
  11. $this->redirect($this->Auth->logout());
  12. }
  13. }

Si bien usted puede dejar la función login() en blanco, necesitara crear la vista para la acción login (guardela en app/views/users/login.ctp). Esta es la única vista del UsersController que es necesario crear, sin embargo. El siguiente ejemplo asume que ya está familiarizado con el uso del Form helper:

   <?php
    $session->flash('auth');
    echo $form->create('User', array('action' => 'login'));
    echo $form->input('username');
    echo $form->input('password');
    echo $form->end('Login');
?>
  1. <?php
  2. $session->flash('auth');
  3. echo $form->create('User', array('action' => 'login'));
  4. echo $form->input('username');
  5. echo $form->input('password');
  6. echo $form->end('Login');
  7. ?>

Esta vista crea un simple formulario de login en el cual introducir el nombre de usuario y la clave. Una vez enviado este formulario, el AuthComponent se encargará del resto por usted. El session flash message mostrara cualquier información generada por el AuthComponent.

Lo creas o no, ya está! Esta es la manera de implementar una increiblemente simple, base de datos de autenticación usando el componente Auth. Sin embargo, hay mucho más que podemos hacer. Echemos un vistazo a algunos usos más avanzados del componente.