在实施通行证并为其后端工作时,出现了此错误。谁能帮我找出解决方法?


  TypeError:无法读取未定义的属性“密码”
      在Query._callback(/Users/oscarstein/Documents/Programering/express-cc/app.js:76:32)


使用以下代码:

passport.use(new LocalStrategy(
  function(username, password, done) {
      console.log(username);
      console.log(password);
      const db = require('./db');

      db.query('SELECT id, password FROM users WHERE username = ?', [username], function(err, results, fields){
        if (err) {done(err)};

        if (results.length == 0) {
          done(null, false);
        }

        const hash = results[0].password.toString();

        bcrypt.compare(password, hash, function(err, response){
            if (response == true) {
              return done(null, {user_id: results[0].id});
            } else {
              return done(null, false);
            }

          });
      })

    }
));

最佳答案

考虑这些代码行

if (err) {done(err)};

if (results.length == 0) {
    done(null, false);
}


它检查是否存在错误,然后执行功能done(err),然后功能流程继续进行。

然后,它检查是否有结果,调用函数done(null, false),然后流程继续进行。

正确的做法是

if (err) {
    return done(err)
}

if (results.length == 0) {
    return done(null, false);
}


上面的通知返回声明。它将中断此回调函数内部的进一步代码执行。

07-24 18:55