以下是我在passportJS中的注册策略。大多数代码都运行正常,直到我在res.sehenticate方法成功验证策略后转到res.send用户参数的底部。但是每当我收到回复时,我都会收到一个带有" false"信息。而不是向我发送用户详细信息,我发送了" false"代替。
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);
});
答案 0 :(得分:0)
您应该在passport.authenticate()
之前使用function(req, res)
作为第二个参数:
`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(用户); });`
通过这种方式,您引入了将在响应之前运行的身份验证中间件。看看这里:https://github.com/passport/express-4.x-local-example/blob/master/server.js