使用护照注册时的错误请求

Posted

技术标签:

【中文标题】使用护照注册时的错误请求【英文标题】:Bad Request when registering with passport 【发布时间】:2018-06-14 05:58:56 【问题描述】:

我正在尝试使用 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】:

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' 
));

【讨论】:

嗨。感谢您的回复。在 post 方法中使用代码时,我收到错误 ReferenceError: next is not defined 是的,那是因为你没有将下一个参数传递给 post 方法,应该是这样的:router.post("/register", function (req, res, next) ...

以上是关于使用护照注册时的错误请求的主要内容,如果未能解决你的问题,请参考以下文章

用户未经授权时的 Laravel 护照自定义错误消息和状态码

如何修复阻止注册用户登录的护照本地身份验证错误

mongodb atlas上的快速护照注册错误

护照通过json发送错误

如何解决护照认证产生的错误

Mongoose“创建”方法 - 没有回调吗? (使用护照和角度)