J'ai fait la recherche de la même chose. Plus précisément, je voulais le suivant:
- Pour utiliser express.js, qui enveloppe de Connecter le middleware de la capacité de
- "La forme en fonction de l'authentification"
- Un contrôle granulaire sur les routes sont authentifiés
- Une base de données back-end pour les utilisateurs/mots de passe
- Des sessions d'utilisation
Ce que j'ai fait était de créer mon propre middleware fonction check_auth
que je passe en argument à chaque itinéraire, je veux authentifié. check_auth
seulement des contrôles de la session, et si l'utilisateur n'est pas connecté, puis redirige vers la page de connexion, comme suit:
function check_auth(req, res, next) {
// if the user isn't logged in, redirect them to a login page
if(!req.session.login) {
res.redirect("/login");
return; // the buck stops here... we do not call next(), because
// we don't want to proceed; instead we want to show a login page
}
// the user is logged in, so call next()
next();
}
Ensuite, pour chaque itinéraire, je vous l'assure cette fonction est transmis en tant que middleware. Par exemple:
app.get('/tasks', check_auth, function(req, res) {
// snip
});
Enfin, nous avons besoin de gérer le processus de connexion. C'est simple:
app.get('/login', function(req, res) {
res.render("login", {layout:false});
});
app.post('/login', function(req, res) {
// here, I'm using mongoose.js to search for the user in mongodb
var user_query = UserModel.findOne({email:req.body.email}, function(err, user){
if(err) {
res.render("login", {layout:false, locals:{ error:err } });
return;
}
if(!user || user.password != req.body.password) {
res.render("login",
{layout:false,
locals:{ error:"Invalid login!", email:req.body.email }
}
);
} else {
// successful login; store the session info
req.session.login = req.body.email;
res.redirect("/");
}
});
});
En tout cas, cette approche a été principalement conçu pour être flexible et simple. Je suis sûr qu'il y a de nombreuses façons de l'améliorer. Si vous en avez, je serais très heureux de recevoir vos commentaires.
EDIT: C'est un exemple simplifié. Dans un système de production, vous ne voulez stocker et comparer les mots de passe en texte clair. Comme un intervenant, il y a des libs qui peuvent aider à gérer les mots de passe de sécurité.