注册护照时的错误请求

时间:2018-01-04 13:28:04

标签: express authentication mongoose passport.js mean-stack

我正在尝试使用PassportJS为MEAN堆栈构建身份验证面板。我有以下代码用于使用电子邮件(而不是默认用户名)和密码注册新用户:

router.post("/register", function (req, res) {
  var newUser = new User({
    username: req.body.email
  });
  User.register(newUser, req.body.password, function (err, user) {
    if (err) {
      return res.render('account/signup');
    }
    passport.authenticate("local")(req, res, function () {
      res.redirect("/account/profile");
    });
  });
});

但是,在运行服务器时,我会看到一个屏幕,上面写着 Bad Request 。 可以假设新用户帐户已成功创建,因为我可以登录该帐户。

我认为错误起源于此处:

passport.authenticate("local")(req, res, function () {
  res.redirect("/account/profile");
});

1 个答案:

答案 0 :(得分:1)

passport.authenticate是一个中间件,这意味着您必须使用3个参数(req, res, next)来调用它:

...
passport.authenticate("local", function(err, user, info) {

    if (err) return next(err); 
    if (!user) return res.redirect('/login'); 

    req.logIn(user, function(err) {
        if (err)  return next(err); 
        return res.redirect("/account/profile");
    });

})(req, res, next);
...

在post方法中使用它:

router.post("/register", function (req, res, next) {
    var newUser = new User({
        username: req.body.email
    });
    User.register(newUser, req.body.password, function (err, user) {
        if (err) {
            return res.render('account/signup');
        }

        // go to the next middleware
        next();

    });
}, passport.authenticate('local', { 
    successRedirect: '/account/profile',
    failureRedirect: '/login' 
}));