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.