Autenticación basada en Token y consultas de bases de datos MS SQL con NODE.JS y EXPRESS.

Hola, retomando nuevamente la escritura de artículos, vamos con algo nuevo que me esta tocando ver en el trabajo que es NODE.JS.

La idea de este post es generar una API con autenticación basada en token y consultas de datos en MS SQL en base al rol de cada usuario.

Para esto desarrollaremos una aplicación bien simple en NODE.JS que:

  1. Utilize Autenticación basada en token, utilizando JWT (JSON WEB TOKENS)
  2. Consultas a BD utilizando el ORM Sequelize.js
    1. definición del modelo
    2. Utilización de SCOPES
    3. Uso de Asociaciones (1:n, n:n, 1:1).
    4. Uso de consultas de MSSQL o RAW QUERYS.
    5. Uso de procedimientos almacenados.
  3. Consultas basadas en ROL.

Que se necesita:

1 –  Node

Descarga e instala NODE desde https://nodejs.org/es/ , yo instale la versión 8.9.4 [LTS] para windows 10 de 64.

2 – Postman

Descarga Postman desde https://www.getpostman.com/

3 – Tu editor de texto favorito.

Por este lado usamos Sublime Text 3

4 – Un motor de base de datos

Para efectos de este ejemplo utilizaremos MS SQL 2017 Express.

 5 – Packages varios, a instalar en el transcurso de este texto.

1 – Autenticación basada en tokens

Existen varias formas de autenticar un usuario en una aplicación web:

Una de ellas es haciendo match entre usuario y clave en una base de datos y crear un registro de sesion que es almacenada en base de datos. Por ende se debe almacenar un registro por cada vez que el usuario se autentique en el sistema.

Otra es utilizando TOKENS, en donde no se guarda un registro de sesión, sino que se solicita un token para acceder al sistema.

Como funciona:

Se utiliza  usuario/contraseña para identificarse en el sistema, si existe el usuario y la contraseña ingresada es la correcta el backend del sistema genera un token que es devuelto al sistema solicitante, A partir de ahi, cada petición HTTP que haga el usuario va acompañada de un token en la cabecera.

Este Token no es más que una firma cifrada que permite a una API identificar al usuario que esta realizando peticiones. Este token no se almacena en el servidor, si no en el lado del cliente y es la API  que se encarga de descrifrar ese Token y redirigir el flujo de la aplicación en un sentido u otro.

(entiéndase por autenticar o autenticación el:   Procedimiento informático que permite asegurar que un usuario de un sitio web u otro servicio similar es auténtico o quien dice ).

Manos a la obra

1 – Creamos un directorio donde alojar nuestra carpeta

2 – Abrimos una consola y vía NPM comenzamos a instalar los packages necesarios para nuestra api.

2 . 1 -Express.

En detalle en: http://expressjs.com/es/starter/installing.html

2.2 – JWT Jason web token

Información del package en: https://www.npmjs.com/package/jsonwebtoken

2.3 – Sequelize y Tedious

2.4 – Bcrypt

2.5 – Nodemon

3 – Creamos la base de datos de nombre EjemploUsuariosRoles en nuestro motor de bases de datos microsoft sql server.

3.1 – Ejecutamos el siguiente script que contiene las tablas, relaciones y datos de ejemplo para nuestro ejemplo.

4 – Estructura del proyecto

En nuestra carpeta debemos generar los siguientes archivos y carpetas.

Importante acá modificar nuestro archivo package.json, que es creado en el momento de ejecutar npm init e ingresar los datos requeridos, dentro de scripts dejar el siguiente comando para levantar la aplicación:

Archivos

Hola mundo

Para probar el funcionamiento de nuestra api necesitamos los siguientes códigos en nuestros archivos.

bin/www

app.js

server/routes.js

y hacemos correr nuestra aplicación ejecutando en la consola:

si esta correcto todo, deberia aparecer el mensaje:

“Nuestra api-node.js esta escuchando en el puerto: 8001”

Ahora con utilizando postman, necesitamos realizar una solicitud a nuestra aplicación a la raiz de nuestra app ‘/’ usando GET , y nuestra aplicación debería responder ‘Hola mundo’.

Con eso ya tenemos nuestra aplicación en funcionamiento, ahora debemos crear los modelos y controladores de la API que contendrán toda la lógica de nuestra api.

 

Monitoreo de transacciones en tablas MS Sql Server con C#

SqlTableDependency es una libreria creada por Cristian del bianco, que nos permite monitorear las operaciones DML (insert, delete, update) efectuadas en una tabla de las bases de datos MS SQL SERVER (desde 2008 r2 en adelante), utilizando el service broker de la base de datos.

para el siguiente ejemplo utilizare

  • Base de datos sql server 2008 R2
  • Visual studio community 2015 para programar una app de consola con C#
  • SqlTableDependency. lo descargas con nugget o en codeplex

Ejercicio

Imaginémonos como supervisores de una empresa que se dedica a arrendar autos y que necesitamos recibir una notificación al instante cuando un auto ingresa o sale de la empresa, sabemos que cada vez que un auto ingresa a la automotora se agrega un registro a la tabla “autosDisponibles” gracias a que tenemos un pórtico lector de tags en nuestro portón que identifica cada vez que sale o ingresa un auto y no tenemos que ingresarlos a mano como en el siglo pasado………….

Base de datos

Para el ejemplo tenemos una base de datos de nombre “automotora” en ms sql server 2008 con la siguiente estructura:

Tabla autos: contiene los autos de la automotora.

Tabla AutosDisponibles: nos informa que autos se encuentran disponibles para arriendo en la columna “Disponible” con un “si o no” y tiene en la columna AutoId el id del automovil que se encuentra en la tabla autos.

el esquema es el siguiente:

Programando

  1. Creamos un proyecto de tipo “Aplicación de consola” en c# de nombre “automotora”.
  2. En nuestra aplicación vamos a proyectos e instalamos vía NuGet el proyecto SqlTableDependency de Christian del bianco, que nos permitirá monitorear las operaciones DML sobre la tabla autosDisponibles de nuestro ejemplo. toda la info y magia de este package en: https://tabledependency.codeplex.com
  3. En nuestra aplicación agregamos un nuevo elemento: Linq to classes, que nos creara el archivo DataClasses1.dbml. Una vez en el dbml agregamos una nueva conexión a nuestra base de datos automotora y arrastramos las dos tablas al modelo para mapearlas, este punto también puede ser con un simple conecctionString en el app.config a mano, acá depende del estilo de cada uno, a mi me gusta más esta forma.
  4. Habilitamos el service bróker en sql server

Si no hacemos esto no parte el monitoreo y obtenemos una excepción no controlada del tipo:

TableDependency.SqlClient.Exceptions.ServiceBrokerNotEnabledException en TableDependency.SqlClient.dll

El código

Correr el programa

si hacemos correr nuestro proyecto, lo que se ve en la consola es lo siguiente:

Si modificamos la columna disponible de nuestra tabla “autosDisponibles” de si a no,  una vez ejecutada la acción la podremos ver reflejada en pantalla.

modificamos de si a no el registro Id:2, en nuestro consola se puede visualizar que el automóvil salio de la empresa.

Volvamos a dejar disponible el registro…

y vemos como el auto volvió a la empresa.

Así que si quiere enviar un sms, email, un mensaje de chat, entre otros,  cada vez que salga o entre un vehículo a la automotora puedes programar esta acción en vez del simple Console.WriteLine que utilize en este ejemplo.

Saludos.

Crawler con Laravel 5.3 y Goutte

Lo primero que debemos hacer es un proyecto en laravel (5.3), para esto utilizaremos composer:

Una vez creado el proyecto seguimos las instrucciones de goutte, se encuentran en el siguiente link laravel-goutte

La primera instrucción nos pide agregar laravel-goutte a nuestro proyecto, entonces  posicionados en el directorio del proyecto, ejecutamos el siguiente comando:

Una vez ejecutado el comando, y siguiendo el manual, agregamos las  aliases y providers correspondiente.

En el ejemplo de github de goutte, el crawler, analiza el sitio duckduckgo, para este ejemplo utilizaremos el sitio fcstats.com para obtener la tabla de posiciones del fútbol de primera división de Chile.

el link para esto es: http://es.fcstats.com/tabla,primera-division-chile,59,1.php

Goutte funciona utilizando los selectores de JQUERY para acceder a las clases e ids de los elementos html para obtener los datos.

Utilizando el inspector de sitio de chrome, revisemos el sitio de fcstats.

En la imagen la tabla tiene la etiqueta tr y el id team_1024, que pertenece a COLO-COLO, si se sigue inspeccionando se obtienen los ids de los demás clubes por deducción.

Modificamos nuestro archivo routes del proyecto para obtener los datos de la tabla de posiciones de la siguiente manera:

 

Entonces en http://localhost/latabla/public/ obtendremos posición del equipo, nombre del equipo, partidos jugados, ganados, empatados, perdidos, goles a favor, en contra y el puntaje tal como se ve en la imagen: