PassportJS deserializeUser hat nie angerufen

Ich habe Passport eingerichtet, um Benutzer zu authentifizieren, die in Mongodb gespeichert sind. Scheint gut zu funktionieren: Die Authentifizierung ist erfolgreich / schlägt fehl und die Sitzungsvariablen werden gesetzt. Es schlägt jedoch fehl, Passport zu veranlassen, nach einer Sitzung zu suchen. Irgendetwas scheint in den console.log-Anweisungen, die ich zu den Anweisungen hinzugefügt habe, nicht zu stimmendeserializeUser Rückruf niemals das Licht der Welt erblicken. Ich gehe davon aus, dass mein Problem damit zusammenhängtdeserializeUser nie angerufen werden. Kann jemand meinen Fehltritt diagnostizieren?

// Passport configuration
passport.serializeUser(function(user, cb){ cb(null, user.id) });
passport.deserializeUser(function(uid, cb){
  console.log("Trying to deserialize user: "+uid);
  User.findById(uid, function(err, user){
    cb(err, user);
  });
});
// auth strategy function
passport.use(new LocalStrategy({usernameField: 'email'},
  function(email, pass, done){
    User.findOne({email: email}, function (err, user) {
      if (err)
        return done(err);
      if (!user)
        return done(null, false, {message: "Couldn't find user"});
      var crypted = bcrypt.hashSync(pass, user.salt);
      if(user.hashpass != crypted)
        return done(null, false, {message: "Bad password"});
      return done(null, user);
    });
  }
));

passport.CreateSession =  function (req, res, next) {
  passport.authenticate('local', function(err, user, info){
    if(err || !user)
      return res.json({status: "Failure: "+err});
    req.logIn(user, function (err){
      if(err)
        return res.json({status: "Failure: "+err});
      return res.json({status: "Authenticated"});
    });
  })(req, res, next);
};

mit dem folgenden in app.js:

app.post('/session', passport.CreateSession); // restify better
app.del('/session', passport.DestroySession);
app.get('/images', passport.CheckSession, routes.images);

Antworten auf die Frage(8)

Ihre Antwort auf die Frage