Node.js: implementare un sistema di login/logout con cookie

Node.js: implementare un sistema di login/logout con cookie

Implementare un sistema di login/logout con cookie non è un'operazione troppo complessa in Node.js.

Installiamo i moduli necessari:


npm install express --save
npm install mongoose --save
npm install cookie-parser --save

Creiamo un modello di utente per MongoDB con Mongoose:


var mongoose = require('mongoose');

var UserSchema  = mongoose.Schema;

var User  = new UserSchema({
    username: String,
    password: String
},{collection: 'users'});

module.exports = mongoose.model('User', User);

Definiamo le route per il login e il logout:


var express = require('express');
var app = express();
var mongoose = require('mongoose');
	mongoose.connect('mongodb://127.0.0.1/database');
var User = require('./models/User');
var cookieParser = require('cookie-parser');
var crypto = require('crypto');

app.use(cookieParser());


app.post('/login', function(req, res) {
	var username = req.body.username;
	var password = req.body.password;
	var encPwd = crypto.createHash('md5').update(password).digest('hex'); // Codifichiamo la password in MD5

	User.findOne({username: username, password: encPwd}, function(err,  user) {
           if(!err) {
               if(user !== null) { // L'utente esiste
                   var loggedInCookie = req.cookies.loggedIn;
                   if(typeof loggedInCookie === 'undefined') { // Creiamo il cookie per memorizzare il login
                       var expires = 30 * 24 * 3600000;
                       // Solo a scopo dimostrativo: il cookie deve avere un valore diverso!
                       res.cookie('loggedIn', user._id, {maxAge: expires, httpOnly: true});
                   }
                   res.redirect('/users/' + username + '/profile'); // Login valido
               } else {
                   res.redirect('/'); // Login errato
               }
           }
     });
});

app.get('/logout', function(req, res) {
	var loggedInCookie = req.cookies.loggedIn;
	if(loggedInCookie) { // Il cookie è presente?
		User.findById(loggedInCookie, function (err, usr) { // Verifica
			if(!err) {
				if(usr !== null) {
					res.clearCookie('loggedIn'); // Logout: cancelliamo il cookie
					res.redirect('/');	
				}
			}
		});
	} else {
		res.redirect('/');
	}
});

Consiglio caldamente di generare il cookie in modo più sicuro evitando di utilizzare l'ID dell'utente.

Torna su