Как исправить: «Ошибка: требуются данные и хеш-аргументы» - PullRequest
0 голосов
/ 27 июня 2019

Я пытаюсь войти в систему с пользователем, которого я зарегистрировал в своей форме, но у меня есть эта ошибка:

Ошибка: требуются данные и хеш-аргументы

Пользователь зарегистрирован в моей базе данных с именем пользователя, полным именем и хешированным паролем благодаря bcrypt.

const pool = require("./pool");
const bcrypt = require("bcrypt");

function User() {}

User.prototype = {
  find: function(user = null, callback) {

  if (user) {
      var field = Number.isInteger(user) ? "id" : "username";
    }
    let sql = `SELECT * FROM users WHERE ${"" + field + ""} = ?`;
    pool.query(sql, user, function(err, result) {
      if (err) console.log(err);
      callback(result);
    });
  },

  create: function(body, callback) {
    let pwd = body.password;
    body.password = bcrypt.hashSync(pwd, 10);

    var bind = [body.username, body.fullname, body.password];
    console.log(bind);

    let sql =
      "INSERT INTO users(username, fullname, password) VALUES (?, ?, ?)";

    pool.query(sql, bind, function(err, lastId) {
      if (err) throw err;
      callback(lastId);
    });
  },

  login: function(username, password, callback) {
    this.find(username, function(user) {
      if (user) {
        if (bcrypt.compareSync(password, user.password)) {
          callback(user);
          return;
        }
      }
    });
  }
};

module.exports = User;

Как только я нажимаю кнопку входа в форму, это ошибка, которую я получаю

  throw err; // Rethrow non-MySQL errors
  ^
    at Object.compareSync (/Users/me/happy/node_modules/bcrypt/bcrypt.js:167:15)
    at /Users/me/happy/core/user.js:46:20
    at Query.<anonymous> (/Users/me/happy/core/user.js:16:7)
    at Query.<anonymous> (/Users/me/happy/node_modules/mysql/lib/Connection.js:525:10)
    at Query._callback (/Users/me/happy/node_modules/mysql/lib/Connection.js:491:16)
    at Query.Sequence.end (/Users/me/happy/node_modules/mysql/lib/protocol/sequences/Sequence.js:83:24)
    at Query._handleFinalResultPacket (/Users/me/happy/node_modules/mysql/lib/protocol/sequences/Query.js:139:8)
    at Query.EofPacket (/Users/me/happy/node_modules/mysql/lib/protocol/sequences/Query.js:123:8)
    at Protocol._parsePacket (/Users/me/happy/node_modules/mysql/lib/protocol/Protocol.js:291:23)
    at Parser._parsePacket (/Users/me/happy/node_modules/mysql/lib/protocol/Parser.js:433:10)

1 Ответ

0 голосов
/ 27 июня 2019

Попробуйте генерировать соль синхронно, обновив эту строку

body.password = bcrypt.hashSync(pwd, 10);

для

body.password = bcrypt.hashSync(pwd, bcrypt.genSaltSync(10));
...