viernes, agosto 29, 2014

Integración paso a paso de Latch en Laravel Framework, el entorno de desarrollo PHP para los artesanos de la web

Laravel, es un entorno de desarrollo de PHP en pleno auge. Destaca por su sencillez sin perder la potencia y funcionalidades de un buen framework. Además su curva de aprendizaje es muy asequible. Permite que los desarrolladores que comienza con él y sin demasiada experiencia en PHP, puedan aprenderlo muy fácilmente, y también que los que tengan más experiencia lo expriman de un modo avanzado. Para poder trabajar con Latch en él, he hecho una integración al igual que ya se hizo una de Latch para Django, así que en este artículo vamos a ver cómo integrar Latch en tu framework de Laravel.

Figura 1: Laravel, entorno de desarrollo de aplicaciones PHP

Instalación del paquete

Se debe usar un gestor de paquetes llamado Composer para instalar el paquete de "Latch para Laravel" disponible en su GitHub. El archivo composer.json (viene incluido en Laravel) permite definir qué paquetes de PHP se usarán en nuestro proyecto, así que se debe añadir la siguiente línea a este fichero en su require:
"faytzel/laravel-latch": "0.*"
Después se debe ejecutar en línea de comandos y a nivel de la raíz del proyecto composer update o composer.phar update (si es la primera vez que se ejecuta composer en nuestro proyecto se debe utilizar composer install o php composer.phar install) según el modo en que se instale composer en el sistema.

Una vez finalizado lo anterior se debe añadir app/config/app.php en la zona de los providers:
'Faytzel\LaravelLatch\LaravelLatchServiceProvider'
y en la zona de facades:
'Latch' => 'Faytzel\LaravelLatch\Facades\LaravelLatch',
Y por último ejecutar en en la raíz del proyecto php artisan config:publish faytzel/laravel-latch para añadir la configuración del paquete a app/config/packages/faytzel/laravel-latch.

Configuración del paquete

Si no se dispone ya de ella, es necesario crear una cuenta como desarrollador de Latch, igual que para poner Latch en WordPress o Latch en Windows. A partir de ahí, se debe crear una aplicación. Su nombre será el que le aparezca al usuario en la app de Latch en el smartphone. El ID de aplicación y el secreto serán necesarios durante la configuración de Laravel. Con esta información, ya solo falta empezar a escribir código.

Parear una cuenta de Latch

El método de PHP que realiza el pareado se llama Latch::pair() y permite parear al usuario de la web de Laravel con su cuenta de Latch. Esto ser realiza a través de un formulario e introduciendo el código de pareado que proporciona al usuario la aplicación de Latch en la app del móvil.

Ahora es necesario crear un controlador llamado LatchController que dispone de un método que servirá para parear la cuenta de un usuario de la web a la cuenta de Latch de su smartphone. Y para eso se utilizará Latch::pair(). Esto devolverá el identificador de Latch del usuario que se acaba de parear para poder administrar este pareado cuando sea necesario.

Figura 2: Latch para Laravel. Código de pareado.

Un detalle interesante es que es posible almacenar cifrado en la base de datos el identificador del usuario que devuelve la API de Latch. Así, por defecto Latch::pair() devuelve el identificador ya cifrado, aunque esto puede desactivarse (el segundo parámetro del método permite activarlo o desactivarlo).

Por otro lado, podría darse el caso, por ejemplo de que un usuario introduzca su código de pareado cuando éste ya ha expirado (a los 60 segundos los códigos de pareados expiran por motivos de seguridad). Ante estos casos el método Latch::pair() indicará que no se pudo parear. Latch::error() es un método que devuelve el mensaje de error que ha ocurrido (actualmente soporta inglés y español), o el código, si usamos Latch::errorCode() para tomar acciones determinadas según cada código de error. Al final el código quedaría algo similar e esto:
php
Class LatchController extends BaseController { public function pair() { // Comprobamos que venga el token desde el formulario if (Input::has('token')) { // Obtenemos el código de pareado del usuario $token = Input::token('token'); // Intenta parear Latch con el código (token) if ($accountId = Latch::pair($token)) { // Si consigue parear guardamos el identificador del usuario (cifrado) de Latch en nuestra base de datos } // Si ocurre algún error, mostramos al usuario un mensaje de error de una forma amigable else { echo Latch::error(); } } } }
Bloquear el acceso de login a cuentas de Latch bloqueadas

El siguiente paso tras la gestión del pareo, es bloquear el acceso de usuarios (en el formulario de login/autenticacion) que mantegan sus cuentas de Latch bloqueadas. Este es el código que debe introducirse en el controlador de login del proyecto que se esté desarrollando:
php
class LoginController extends BaseController { public function login() { // Datos del formulario enviados por el usuario $input = Input::all(); // Reglas de validacion $rules = array( 'email' => 'required|email', 'password' => 'required' ); // validamos los datos del formulario de login $validator = Validator::make($input, $rules); if ($validator->passes()) { // Credenciales para el inicio de sesion del usuario $credentials = array('email' => $input['email'], 'password' => $input['password']); // Establece si tenemos acceso para acceder a nuestra cuenta de usuario $locked = true; // Comprobamos si el usuario es valido pero sin loguearlo if (Auth::validate($credentials)) { // Obtenemos el identificador del usuario de Latch de nuestra base de datos (con sql) $user = User::where('email', '=', $input['email'])->first(); $accountId = $user->latch_account_id; // Comprueba si Latch nos da acceso if (Latch::unlocked($accountId)) { $locked = false; } } // Si la cuenta del usuario no esta bloqueada if ( ! $locked) { // Autentica al usuario if (Auth::attempt($credentials)) { // } } } } }

Latch::unlocked() indicará si el usuario no ha bloqueado nuestra aplicación desde su smartphone con Latch, y Latch::locked() haría justo lo contrario aunque no será necesario usarlo en esta ocasión. Como se ha mencionado anteriormente, el identificador se almacena cifrado en la cuenta. Latch::unlocked() hará todo el trabajo de forma transparente, por lo que no hay que preocuparse.

Desparear una cuenta de Latch

Ya solo falta poder desparear la cuenta de Latch del usuario de nuestra aplicación. Es simple:
php
class LatchController extends BaseController { public function pair() { // codigo ... } public function unpair() { // Obtenemos el identificador del usuario de Latch de nuestra base de datos $accountId = Auth::user()->latch_account_id; // Despareamos al usuario de Latch if (Latch::unpair($accountId)) { // Eliminamos el identificador del usuario de Latch de nuestra base de datos } // Si hay algun error, se lo mostramos al usuario else { echo Latch::error(); } } }
Igual que con los otros métodos, por defecto Latch::unpair() descifra internamente el identificador.

Autor: José María Gómez

3 comentarios:

Paula dijo...

Buenos días, interesante post, gracias
(:

Anónimo dijo...

Pues yo hace un tiempo hice también una extensión para laravel :D https://github.com/xinax/laravel-latch Saludos!

Anónimo dijo...

¿Habéis valorado la posibilidad de publicar la App de Android fuera del Google Play Store?

Entrada destacada

Cibercriminales con Inteligencia Artificial: Una charla para estudiantes en la Zaragoza

Hoy domingo toca ir a participar en un evento, con una charla y una pequeña demo. Ahora mismo sí, así que el tiempo apremia, os dejo una cha...

Entradas populares