未在表单提交中调用护照验证

时间:2019-11-14 01:11:16

标签: node.js passport.js

我正在尝试使用本地护照,但是好像没有调用verify函数。我有a,b和c的console.log,但是它们都不触发任何输出。它确实重定向到/ failure

var LocalStrategy = require('passport-local').Strategy;



  passport.use(new LocalStrategy(
    function (username, password, done) {
      console.log('a')
      users.findOne({ username: username }, function (err, user) {
        console.log('b')

        if (err) { return done(err); }
        if (!user) { return done(null, false); }
        if (!user.verifyPassword(password)) { return done(null, false); }
        return done(null, user);
      });
    }
  ));

  app.get('/login', (req, res, next) => {
    res.send(`<form action="/login" method="post">
    <div>
        <label>Username:</label>
        <input type="text" name="username"/>
    </div>
    <div>
        <label>Password:</label>
        <input type="password" name="password"/>
    </div>
    <div>
        <input type="submit" value="Log In"/>
    </div>
</form>`);
  });

  app.post('/login',
    passport.authenticate('local', { failureRedirect: '/failure' }),
    function (req, res) {
      console.log('c')
      res.redirect('/');
    });

1 个答案:

答案 0 :(得分:0)

问题在于1 12 123 123- 123-4 123-45 123-456 123-456-7 123-456-78 123-456-789 t th thi this thisi thisis thisisa thisisat thisisate thisisates thisisatest 未被填充,因为主体解析器未包含在express中。

添加req.bodyvar bodyParser = require('body-parser'),以便app.use(bodyParser.urlencoded({ extended: false }))用于本地护照

这是在粘贴一些console.log消息req.body并发现失败是“缺少凭据”,并在passport/lib/middleware/authenticate中查找该字符串,并发现正文未定义之后才发现的,我意识到passport-local/lib/strategy丢失。