miércoles, 21 de mayo de 2014

En este post vamos a configurar el Plugin Users de la gente de CakeDC en una aplicación desarrollada con CakePHP 2.x. Vamos a empezar.


¿Que es el Plugin Users?

Es un plugin para CakePHP desarrollado por la gente de CakeDC para el registro, login, logout y más de usuarios. Este plugin por si mismo es capaz de:


  • Registro de usuarios (Habilitado por defecto)
  • Verificación de registro por token enviado vía email
  • Login de usuarios (email/password)
  • Reseteo de password basado en token vía email e ingresando nuevo password
  • Perfil de usuario simple
  • Búsqueda de usuarios (requiere CakeDC Search Plugin)
  • Gestión de usuarios usando la seccion "admin" (add/edit/delete)
  • Gestión de Roles simple

Por defecto para el reseteo de password se requiere que el usuario ingrese su dirección de email, se le envía un mail con un link y token. Cuando accede a la URL con el token el usuario podrá ingresar un nuevo password.


Comenzamos

Nota: Vamos a suponer que ya tenemos instalado CakePHP 2.x en nuestro servidor con la base de datos configurada, para este tutorial hemos usado la version 2.5.1. Si todavia no lo teneis instalado podeis instalarlo desde aqui siguiendo los pasos desde la documentación oficial de CakePHP.
El plugin CakeDC Users requiere PHP5.2+, CakePHP 2.x, plugin CakeDC Search y plugin CakeDC Utils.


1. Instalamos el Plugin Users

Para instalar el plugin solo teneis que descargarlo desde Github y descomprimirlo en una carpeta llamada Users en la siguiente ruta de vuestra aplicación /project_name/app/Plugin/Users, aquí os dejo el enlace


O de forma alternativa si usais Git podeis teclear el siguiente comando:

git submodule add git@github.com:CakeDC/Users app/Plugin/Users

Para que este plugin fucione es necesario instalar otro dos plugin de la gente de CakeDC. Estos son el plugin Search y el plugin Utils seguiremos el mismo procedimiento, los descargamos y los descomprimimos en las siguientes rutas respectivamente /project_name/app/Plugin/Search y /project_name/app/Plugin/Utils

Si preferis hacerlo con git tecleamos los siguientes comandos.

Para el plugin Search git submodule add git@github.com:CakeDC/Search app/Plugin/Search

Para el plugin Utils git submodule add git@github.com:CakeDC/Utils app/Plugin/Utils


2. Crando las tablas en la Base de Datos

Esto los podemos hacer de dos formas, desde la consola de CakePHP o simplemete utilizando phpMyAdmin y ejecunatdo la siguiente secuencia SQL CREATE TABLE IF NOT EXISTS `users` (
  `id` varchar(36) COLLATE utf8_spanish_ci NOT NULL,
  `username` varchar(255) COLLATE utf8_spanish_ci NOT NULL,
  `slug` varchar(255) COLLATE utf8_spanish_ci NOT NULL,
  `password` varchar(128) COLLATE utf8_spanish_ci DEFAULT NULL,
  `password_token` varchar(128) COLLATE utf8_spanish_ci DEFAULT NULL,
  `email` varchar(255) COLLATE utf8_spanish_ci DEFAULT NULL,
  `email_verified` tinyint(1) DEFAULT '0',
  `email_token` varchar(255) COLLATE utf8_spanish_ci DEFAULT NULL,
  `email_token_expires` datetime DEFAULT NULL,
  `tos` tinyint(1) DEFAULT '0',
  `active` tinyint(1) DEFAULT '0',
  `last_login` datetime DEFAULT NULL,
  `last_action` datetime DEFAULT NULL,
  `is_admin` tinyint(1) DEFAULT '0',
  `role` varchar(255) COLLATE utf8_spanish_ci DEFAULT NULL,
  `created` datetime DEFAULT NULL,
  `modified` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `BY_USERNAME` (`username`),
  KEY `BY_EMAIL` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;

CREATE TABLE IF NOT EXISTS `user_details` (
  `id` varchar(36) COLLATE utf8_spanish_ci NOT NULL,
  `user_id` varchar(36) COLLATE utf8_spanish_ci NOT NULL,
  `position` float NOT NULL DEFAULT '1',
  `field` varchar(255) COLLATE utf8_spanish_ci NOT NULL,
  `value` text COLLATE utf8_spanish_ci,
  `input` varchar(16) COLLATE utf8_spanish_ci NOT NULL,
  `data_type` varchar(16) COLLATE utf8_spanish_ci NOT NULL,
  `label` varchar(128) COLLATE utf8_spanish_ci NOT NULL,
  `created` datetime DEFAULT NULL,
  `modified` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `UNIQUE_PROFILE_PROPERTY` (`field`,`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;

Si decidimos hacerlo con la consola tenemos que teclear el siguiente comando: ./Console/cake schema create users --plugin Users


3. Cargando el Plugin Users y las Rutas

Ahora tenemos que cargar nuestro Plugin Users junto con los Plugin Utils y Search en nuestro CakePHP, para ello abrimos nuestro fichero boottstrap.php ubicado en /project_name/app/Config/bootstrap.php y añadimos las siguientes lineas de codigo: CakePlugin::load('Users' array('routes' => true));
CakePlugin::load('Search');
CakePlugin::load('Utils');

Cuando indicamos en la carga del plugin Users array('routes' => true) lo que estamos haciendo es cargar las rutas definidas para el plugin para tener las pretty URL, es decir, http://localhost/project_name/users/login y no http://localhost/project_name/users/users/login


4. Accediendo a las acciones del Plugin

Una vez que tenemos todo configurado podemos acceder a las acciones de la siguiente manera:

  • Login http://localhost/project_name/users/login o http://localhost/project_name/login
  • Registro http://localhost/project_name/register o http://localhost/project_name/users/add

Esta seria la configuración básica del Plugin Users. Ahora vamos a ver como configurar algunas opciones más del plugin y como personalizarlo y adaptarlo a nuestras necesidades.


5. Configurando el Email para poder enviar correos.

Por defecto el Plugin Users utiliza la opción 'default' de nuestra configuración de email que se encuentra en /project_name/app/Config/email.php, si necesitamos especificar otra, por ejemplo gmail, tendriamos que añadir la siguiente linea a nuestro fichero bootstrap.php: Configure::write('Users.emailConfig', 'gmail'); No olvideis declarar la variable $gmail con la configuración en vuestro fichero /project_name/app/Config/email.php.

Si queries saber como se configura CakePHP para enviar emails utilizando una cuenta de Gmail o una cuenta Smtp/Pop3 podeis revisar este post.

Para reescribir las plantillas para los Email hay que modificar los ficheros localizados en /project_name/app/Plugin/Users/View/Emails/txt


6. Utilizar la funcionalidad "Remember me".

Para habilitar esta funcionalidad tenemos que seguir los siguientes pasos (esto es muy bien explicado en la documetnacion del Plugin en Github simplemete voy a traducir lo que pone).

Primero abrimos nuestro AppController y añadimos el componente "User.RemeberMe" y el componente Auth (esto no esta indicado en la documentación pero es necesario añadirlo. public $components = array(
    'Users.RememberMe',
    'Auth'
);
Ahora siguiendo en nuesto AppController declaramos el método beforeFilter y añadimos lo siguiente: public function beforeFilter() {
    parent::beforeFilter();
    $this->RememberMe->restoreLoginFromCookie();
}

Con esto ya tendriamos la funcionalidad habilitada, el código lo que hace es leer las credenciales desde la cookie y logear al usuario segun estas.




1 comentario :