Ejemplo de una sesión "auth" básica en NodeJS

La autentificación es el proceso de verificar que un usuario es de hecho quién él o ella dice ser. Autorización es el proceso de determinar si el usuario tiene o no los privilegios de acceso a los recursos que él o ella pide.

A continuación se mostrará un ejemplo de uso de ambos conceptos en las sesiones de ExpressJS:

session_auth.js
var express = require('express'),
    app = express(),
    session = require('express-session');
app.use(session({
    secret: '2C44-4D44-WppQ38S',
    resave: true,
    saveUninitialized: true
}));

// Authentication and Authorization Middleware
var auth = function(req, res, next) {
  if (req.session && req.session.user === "amy" && req.session.admin)
    return next();
  else
    return res.sendStatus(401);
};

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

// Logout endpoint
app.get('/logout', function (req, res) {
  req.session.destroy();
  res.send("logout success!");
});

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

app.listen(3000);
console.log("app running at http://localhost:3000");

Todo esto se ejecuta empleando los siguientes comandos:

npm install express
npm install express-session
node session_auth.js &

Con esto se puede acceder a las siguientes URL's dentro del navegador web:

localhost:3000/content
localhost:3000/login?username=amy&password=amyspassword
localhost:3000/content
localhost:3000/logout
localhost:3000/content

Explicación del código

var express = require('express'),
    app = express(),
    session = require('express-session');
app.use(session({
    secret: '2C44-4D44-WppQ38S',
    resave: true,
    saveUninitialized: true
}));

Sirve para importar los módulos de express y de las sesiones de express (express-session). Crea una app de express y añade una sesión a la misma como si fuese un middleware.

// Authentication and Authorization Middleware
var auth = function(req, res, next) {
  if (req.session && req.session.user === "amy" && req.session.admin)
    return next();
  else
    return res.sendStatus(401);
};

Son las funciones de autentificación y autorización del middleware. Concede acceso al siguiente paso si un usuario se valida correctamente.

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

localhost:3000/login?username=amy&password=amyspassword:

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

Es la url de acceso y de comprobación de acceso de usuario que guarda lo antes dicho y el nivel de acceso de dicha sesion. La sesion será completamente diferente para cada usuario y será única para cada uno según el navegador desde el que se acceda.

localhost:3000/logout:

// Logout endpoint
app.get('/logout', function (req, res) {
  req.session.destroy();
  res.send("logout success!");
});

Se encarga de la desconexión de sesión mediante la destrucción de la misma. Una vez destruida el usuario tendrá que realizar de nuevo los pasos de autentificación y autorización para que se le concedan permisos otra vez.

localhost:3000/content:

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

Obtiene el contenido protegido. La función "auth" de autentificación es pasada como parámetros como un middleware antes de que se proceda a servir el contenido al usuario. Si la función "auth" determina que el usuario no es válido, no pasará al contenido de la siguiente función, restringiendo el acceso.

results matching ""

    No results matching ""