Passport.js ne passe pas à l'utilisateur de demander au req.login()

Mon passport.js la configuration va comme suit:

const Local = require("passport-local").Strategy;
const USMODEL = require("../models/user.js");
passport.serializeUser(function(user, done) {
    console.log("SERIALIZING USER");
    done(null, user.id);
});
passport.deserializeUser(function(id, done) {
    console.log("DESUSER", id);
    var US = mongoose.model("RegUser", USMODEL);
    US.findById(id, function(err, user) {
        done(err, id);
    });
});
passport.use("local-login", new Local({
    usernameField: "email",
    passwordField: "password",
    passReqToCallback: true

},function(req, email, password, done) {
    var US = mongoose.model("RegUser", USMODEL);
    US.findOne({"email": email}, function(err, user){
        if(err) throw err;
        if(!user) return done(null, false);
        if(!user.validPassword(password)) {
            console.log("password not valid");
            return done(null, false);
        }
        return done(null, user);
    });
}));

Je vais changer la mangouste modèle au sein de chaque fonction, car je jongle avec plusieurs collections à la fois et j'aime avoir le contrôle complet de ce qui se passe.

Mon router.js fichier est le suivant des chemins qui font usage du passeport middleware:

app.get("/user/login", function(req, res) {
    res.render("signin");
});
app.post('/user/login', function (req, res){
    passport.authenticate('local-login', function(err, user, info){
        if (err) return res.redirect("/");
        if (!user) return res.redirect('/');

        else {
            req.login(user, function(err) {
              if (err) return next(err);
              console.log("Request Login supossedly successful.");
              return res.redirect('/admin/filter');
            });
        }
    })(req, res);
});

Qui, lors de l'authentification réussie, redirige vers /admin/filtre dans le même routeur qui va comme si.

app.get("/admin/filter", isLoggedIn, function(req, res){
//rendering stuff here
});

Maintenant, l'admin/filtre demande va au-delà d'un middleware appelé isLoggedIn qui, en théorie, protège mes points de terminaison. Il va comme ceci:

function isLoggedIn(req, res, next) {
console.log("This is the authentication middleware, is req authenticated?");
console.log(req.isAuthenticated());
console.log("Does req.user exist?")
console.log(req.user);
return next();
}

Maintenant, vous attendez que parce que j'ai appelé req.connexion et je me suis redirigé vers mon point de terminaison de choix, la demande devra être authentifié. Ce n'est pas le cas.

Request Login supossedly successful.
This is the authentication middleware, is req authenticated?
false
Does req.user exist?
undefined

Je n'arrive pas à trouver la source de mon problème. Tout vérifie, que la stratégie est évoquée, ainsi que la fonction de rappel et req.login qui rendrait, en théorie, un req.user objet avec les données qu'il contient. Une chose étrange que j'ai observé, c'est que je ne vois pas le passport.deserializeUser() méthode dans l'action. Jamais. Mais qui pourrait être en rapport avec le problème. Le passeport est certainement l'aide de ma stratégie et le rendu d'un objet utilisateur, mais de toute façon ce même objet n'est pas d'aller dans la demande. Avez-vous une suggestion ou une idée de ce qui se passe?

u ne faut require('passport') ainsi? ou est passport-local en prenant soin de que - j'ai installé passeport à partir de zéro et avaient le même problème à un moment, essayant de se rappeler quel était le problème.
essayez de mettre req.login(user... dans votre passport.js fichier dans la fonction de rappel à la fin
ouais @ewizard passeport local nécessite l'utilisation de passeport qu'il comprend la stratégie.

OriginalL'auteur Eduardo de Luna | 2014-06-11