Passport JS无法检索用户

时间:2017-08-08 14:15:35

标签: javascript node.js express authentication passport.js

以下是我在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);
});

1 个答案:

答案 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