繁体   English   中英

护照验证卡住,不返回任何值

[英]Passport authenticate is stuck and does not return any value

这个认证工作正常

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.js文档提供了一个带有函数的示例,但是仅当身份验证成功后才调用该函数。 我想在验证之前执行字段验证。

让我知道您是否需要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);
  }

在尝试引入express-validator时,我有完全相同的代码和问题。

我可以确认是否添加了额外的“(req,res,next);”。 至password.authenticate函数的末尾确实允许身份验证过程完成和/ login处理。

但是,仅使用此方法对护照进行了身份验证后,似乎没有其他用户添加到数据库中。 我认为需要对护照进行自定义回调,例如:

http://www.passportjs.org/docs/authenticate/

使用示例: https//gist.github.com/Xeoncross/bae6f2c5be40bf0c6993089d4de2175e

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM