Autenticación y autorización en node.js mediante Express.js

Para los procesos de autenticación (el proceso de verificar si el usuario es quien dice que es) y autorización (ver si el usuario tiene los permisos necesarios para acceder a un recurso) usamos el middleware express-session. Siempre hay un inicio de sesión (un login), un fin de sesión (logout) y una página que utiliza GET/POST. En el login asignará una identidad que te dará el acceso que tiene tu usuario y en el logout se revocará al usuario esa identidad.

Para empeezar necesitamos instalar el middleware express-session con el comando npm install express-session.

Adelante se explica un código donde se hace un proceso de autenticación y autorización.

Primero empezamos importando express y los modulos necesarios:

var express = require('express');
var app = express();
var session = require('express-session');

Después añadimos express-session a nuestra aplicación express:

app.use( session( {
  /* Aquí irían los atributos de nuestra sesión, como claves,
   * cómo se guarda, tiempo de expiración, etc...
   */
}));

Un middleware de autenticación y autorización que sólo permite ejecutar el paso siguiente si el usuario es José y tiene permisos de administrador se puede hacer de la siguiente manera:

var auth = function(req, res, next) {
  if (req.session && req.session.user === "jose" && req.session.admin)
    return next();
  else
    return res.sendStatus(401);
};

Aquí un ejemplo de una petición GET, donde se va a crear una sesión si el usuario suministrado es jose y la contraseña es la correcta. Para este usuario se le va a fijar permisos de admin.

app.get('/login', function (req, res) {
  if (!req.query.username || !req.query.password) {
    res.send('login failed');
  } else if(req.query.username === "jose" || req.query.password === "hunter2") {
    req.session.user = "jose";
    req.session.admin = true;
  }
});

Al llegar el final de la sesión, se destruye la sesión.

app.get('/logout', function (req, res) {
  req.session.destroy();
});

Para llegar a la ruta content necesitamos tener permisos de administrador:

app.get('/content', auth, function (req, res) {
    res.send("You can only see this after you've logged in.");
});

results matching ""

    No results matching ""