Passport JS无法检索用户

以下是我在护照​​JS的注册策略。 大部分的代码运行正常,直到在res.send用户参数的底部,在passport.authenticate方法成功validation策略之后发送用户参数。 然而,无论何时我发回回应,我都会收到一个带有“假”消息的页面。 而不是发送给我的用户的详细信息,我发送“虚假”,而不是。

app.use(passport.initialize()); app.use(passport.session()); passport.serializeUser(function(user, done) { return done(null, user.id); }); passport.deserializeUser(function(id, done) { User.findById(id, function(err, user) { done(err, user); }); }); passport.use("registerUser", new LocalStrategy({ passReqToCallback: true }, function(req, username, password, done) { var newUser = new User({ name: username, email: req.body.email, password: password }); newUser.save(function(err) { if (err) { return done(err); } return done(null, newUser); }); })); app.get("/", function(req, res) { res.render("index", { title: "Register!", url: req.url }); }); app.post("/", function(req, res, next) { passport.authenticate("registerUser", function(err, user) { if (err) { return done(err); } res.send(user); })(req, res, next); }); 

你应该在function(req, res)之前使用passport.authenticate()作为第二个参数:

 `app.post('/', passport.authenticate('registerUser', function(err, user) { if (err) return done(err); if (!user) return done(null, false); done(null, user); 

}),function(req,res){res.send(user); });`

这样你就引入了在响应之前运行的authentication中间件。 看看这里: https : //github.com/passport/express-4.x-local-example/blob/master/server.js