Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Passport authenticate被卡住,不返回任何值_Javascript_Node.js_Express_Express Validator - Fatal编程技术网

Javascript Passport authenticate被卡住,不返回任何值

Javascript Passport authenticate被卡住,不返回任何值,javascript,node.js,express,express-validator,Javascript,Node.js,Express,Express Validator,这个很好用 app.post('/login', passport.authenticate('local-login', { successRedirect: '/home', failureRedirect: '/login', failureFlash: true }) ); 但是我尝试在使用express validator进行身份验证之前验证表单的字段 是我带来的 app.post('/login', function(req, res){ req.c

这个很好用

app.post('/login', passport.authenticate('local-login', {
    successRedirect: '/home',
    failureRedirect: '/login',
    failureFlash: true
  })
);
但是我尝试在使用express validator进行身份验证之前验证表单的字段

是我带来的

app.post('/login', function(req, res){
  req.checkBody('email', 'Email is required').notEmpty();
  req.checkBody('email', 'Email is not valid').isEmail();
  req.checkBody('password', 'Password is required').notEmpty();
  var validationErr = req.validationErrors();

  if (validationErr){
    res.render('login', {
      errors: validationErr,
      failureFlash: true
    });
  } else {
    // authenticate once fields have been validated
    passport.authenticate('local-login', {
        successRedirect: '/home',
        failureRedirect: '/login',
        failureFlash: true // allow flash messages
    })
  }
});
使用第二个代码,当我提交表单时,没有发生任何事情,客户端发出错误消息localhost在一段时间后没有发送任何数据。第一部分工作正常,当我提交一个空表单并到达authenticate方法时,我可以看到所有错误。我怀疑这可能部分回答了我的问题,或者有点关联,但我不明白

提供了一个函数示例,但该函数仅在身份验证成功时才被调用,因此在。我想在身份验证之前执行字段验证


如果您需要passport.authenticate代码,请告诉我。

passport.authenticate
是一项功能。在您的第一个(工作)代码中,您将其称为中间件,在这里它将(req、res、next)的对象作为参数传递

对于第二个代码,您试图直接调用它,并且不带参数,而客户端由于没有得到响应而超时

如果我没有遗漏什么,您可以通过将(req,res)传递给它来完成这项工作,如下所示:

  if (validationErr){
      res.render('login', {
          errors: validationErr,
          failureFlash: true
      });
  } else {
      // authenticate once fields have been validated
      passport.authenticate('local-login', {
          successRedirect: '/home',
          failureRedirect: '/login',
          failureFlash: true // allow flash messages
      })(req, res, next);
  }

passport.authenticate
是一项功能。在您的第一个(工作)代码中,您将其称为中间件,在这里它将(req、res、next)的对象作为参数传递

对于第二个代码,您试图直接调用它,并且不带参数,而客户端由于没有得到响应而超时

如果我没有遗漏什么,您可以通过将(req,res)传递给它来完成这项工作,如下所示:

  if (validationErr){
      res.render('login', {
          errors: validationErr,
          failureFlash: true
      });
  } else {
      // authenticate once fields have been validated
      passport.authenticate('local-login', {
          successRedirect: '/home',
          failureRedirect: '/login',
          failureFlash: true // allow flash messages
      })(req, res, next);
  }

我在尝试引入ExpressValidator时遇到了完全相同的代码和问题

我可以确认,在passport.authenticate函数的末尾添加额外的“(req,res,next);”,确实允许完成身份验证过程和/或登录过程

但是,在passport单独使用此方法进行身份验证后,似乎没有额外的用户添加到数据库中。我认为需要对passport进行自定义回调,例如:


使用示例:

我在尝试引入express validator时遇到了完全相同的代码和问题

我可以确认,在passport.authenticate函数的末尾添加额外的“(req,res,next);”,确实允许完成身份验证过程和/或登录过程

但是,在passport单独使用此方法进行身份验证后,似乎没有额外的用户添加到数据库中。我认为需要对passport进行自定义回调,例如:


用法示例:

正如Jim的答案中指出的,此处的键是最终键(req,req,next),因为passport.authenticate是一个中间件,您需要调用req,res,next)并为Jim的答案中指出的功能传回res。此处的键是最终键(req,req,next),因为passport.authenticate是一个中间件,您需要调用req,res,next)并传回函数的res