hello-cookie.js


En este ejemplo veremos una forma muy simple de realizar un login utilizando cookies y permitir el acceso a /content tan solo si el usuario ha realizado el login.

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

app.use(express.static(path.join(__dirname, '/../img')))

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

app.get('/', function(req, res, next){
   res.send("Visit /content. If you cannot see anything, you should login at /login.To logout go to /logout")
})

// Login endpoint
app.get('/login', function (req, res) {
  if (!req.query.username || !req.query.password) {
    res.send('login failed' + 'You should visit /login?username=user&password=yourpassword' + "\n Try user = who and password = whospassword");
  } else if(req.query.username === "who" || req.query.password === "whospassword") {
    req.session.user = "who";
    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.sendFile('../kitten.jpg')
    //res.write("You can only see this after you've logged in.");
    res.send('<a>You can only see this after you have logged in.</a><br><img src="kitten.jpg">')
});

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

Comentando el ejemplo:

En la variable "auth" estamos creando un middleware que solo dejará pasar si existe una sesion y si el usuario de dicha sesión es el usuario "who", que a demás es el admin. Este middleware es utilizado en el handdler para "/content", que tiene una respuesta tan solo si te has registrado previamente, es decir, si has entrado a /login como /login?username=who&password=whospassword, de otra manera no se permitirá el login. Si entras a la ruta "/logout", se destruye la sesión actual.

results matching ""

    No results matching ""