Tutorial de Programación Android – Login con NodeJS, Express y Json Web Token – Devolviendo el Json Web Token

Tutorial de Programación Android – Login con NodeJS, Express y Json Web Token – Devolviendo el Json Web Token

De momento ya hemos visto en este Tutorial de Programación Android que nuestro proyecto es capaz de registrar usuarios y de loguearlos, cuando se lo ordenamos desde dentro. Ha llegado el momento de que nuestra API responda a las peticiones del exterior. En concreto vamos a ver como lograr que responda a las peticiones de Login. Hemos optado por una autentificación básica, en la que el email y el password del usuario a loguear van a ir en la cabecera de la petición codificadas en Base64. Más adelante veremos como hacer esto desde nuestra aplicación Android, pero de momento, vamos a ir comprobando el funcionamiento.

Vamos a añadir primero un archivo ‘config.json’ en la carpeta config, con este simple contenido:

{
  "secret" : "NodeLoginAndroid"
}

Posteriormente vamos a colocar una nueva ruta a nuestro archivo rutas.js, que quedaría de la siguiente manera:

var auth = require('basic-auth');
var jwt = require('jsonwebtoken');
var express = require('express');
var rutas = express.Router();
var registro = require('./funciones/registro');
var login = require('./funciones/login');
var config = require('./config/config.json');

rutas.get('/', function(req, res) {
    res.end('Bienvenido a la raiz de la api');
});
rutas.post('/autentificar', function(req, res) {
    var credenciales = auth(req);

    if (!credenciales) {

        res.status(400).json({
            message: 'Petición no valida'
        });

    } else {
        console.log(credenciales);
        login.Login(credenciales.name, credenciales.pass)
            .then(function(result) {
                var token = jwt.sign(result, config.secret, {
                    expiresIn: 1440
                });
                res.status(result.status).json({
                    message: result.mensaje,
                    token: token
                });

            }, function(error) {

                res.status(error.status).json({
                    message: error.mensaje
                });
            });
    }
})

exports.rutas = rutas;

Hemos añadido la importación del archivo config.json y una nueva ruta, en este caso ‘/autentificar’. Lo primero que haremos cuando nos llega una petición a esta ruta es comprobar, mediante auth(req) que parsea la cabecera, recoge la autorización y la devuelve en forma de objeto con dos propiedades: user y pass. Si algo no va bien retornará undefined y nosotros un status 400 de petición no válida.

Si las credenciales son válidas, se las pasamos a nuestra función de login que, recordemos, espera dos parámetros (email y password). Ella será la encargada de comprobar si coinciden y en caso de éxito ya sabemos que devolverá un status 200 y el email del usuario logueado. Con ese email y nuestra palabra secreta que definimos en config.json vamos a generar un token que devolveremos al usuario.

De ello se va a encargar el módulo de nodejs ‘jsonwebtoken’ que devolverá una cadena de texto firmada con nuestra palabra secreta, de manera que podamos verificar la autenticidad del mismo si conocemos la palabra secreta usada para firmarla. Un JWT consta de tres partes: Header, en la que va el tipo de token y el algoritmo de firma, payload, donde va la información que queremos transmitir y signature que incorpora la firma.

Una vez que tenemos todo junto, ejecutamos nuestro proyecto desde la raiz con el comando node index y con alguna extensión del navegador vamos a realizar la petición a nuestra nueva ruta. Yo he usado Simple REST Client de la manera que podéis ver en la siguiente imagen. Lo que veis después de basic en la cabecera de la petición no es más que una cadena de texto conteniendo email y password separados por dos puntos => pedro@prueba.com:prueba codificados en Base64. No suele ser muy elegante enviar contraseñas en texto plano:

La consola de la aplicación nos mostrará la siguiente salida:

Si ahora cogemos el token que nos ha devuelto nuestra api, lo podemos verificar fácilmente en https://jwt.io/. En nuestro caso particular, esto es lo que podemos ver:

Y una vez llegados hasta aquí, creo que en el siguiente capítulo del tutorial de Programación Android vamos a meternos con la creación de la aplicación móvil para Android que hará uso de las rutas que hemos configurado en nuestra API. Puedes consultar el resto de capítulos de este tutorial de programación Android y Javascript:

Login con NodeJS, Express y Json Web Token – Definiendo modelos

Login con NodeJS, Express y Json Web Token – Definiendo modelos En este tutorial de programación Android y Javascript voy a intentar explicar como crear una aplicación móvil que permita el Login en Android, haciendo uso de NodeJS y Mysql en la parte del servidor y Json Web Tokens para el manejo de sesiones. Un proyecto […]

0 comentarios

Tutorial de Programación Android – Login con NodeJS, Express y Json Web Token – Añadiendo rutas

Login con NodeJS, Express y Json Web Token – Añadiendo rutas Continuamos con la segunda parte del tutorial de Programación Android sobre como crear una aplicación móvil para Android que nos permita hacer login y autentificar usuarios, manteniendo la sesión de los mismos abierta. En la entrada anterior habíamos llegado hasta la creación de las […]

2 comments

Tutorial de Programación Android – Login con NodeJS, Express y Json Web Token – Devolviendo el Json Web Token

Tutorial de Programación Android – Login con NodeJS, Express y Json Web Token – Devolviendo el Json Web Token De momento ya hemos visto en este Tutorial de Programación Android que nuestro proyecto es capaz de registrar usuarios y de loguearlos, cuando se lo ordenamos desde dentro. Ha llegado el momento de que nuestra API responda […]

0 comentarios

Tutorial de Programación Android – Login con NodeJS, Express y Json Web Token – Creando la app móvil

Tutorial de Programación Android: Login con NodeJS, Express y Json Web Token – Creando la app móvil: Nuestra LoginActivity Continuando con la serie de artículos que componen este tutorial de Programación Android, vamos a comenzar con la parte del diseño de la aplicación para Android que va a interactuar con el servidor que tenemos creado. […]

0 comentarios

Tutorial de Programación Android – Login con NodeJS, Express y Json Web Token – Refinando la app móvil

Tutorial de Programación Android: Login con NodeJS, Express y Json Web Token, refinando nuestra app móvil: la BaseActivity Continuamos con este Tutorial de Programación Android: Login con NodeJS, Express y Json Web Token. Una vez tenemos la parte del login de nuestra aplicación funcionando, vamos a poner la cosa un poco más elegante. Vamos a crear […]

0 comentarios

 

Deja un comentario

Cerrar menú