数据必须是字符串,salt必须是salt字符串或多轮

时间:2019-05-30 05:56:21

标签: node.js salt oracledb

这是我得到的错误: 错误:数据必须为字符串,salt必须为salt字符串或多个整数。 这是我编写的用于使用他们的电子邮件ID重置数据库中密码的代码。 如果这不正确,谁能告诉我如何使用oracle数据库在node js中重置密码。 错误出现在bcrypt.hash行中。

下面是整个代码:

function changePassword(email, newPassword, callback) {

    var oracledb = require('oracledb');
    oracledb.outFormat = oracledb.OBJECT;

    oracledb.getConnection({
        user          : '',
        password      : '',
        connectString : ''
      },
      function(err, connection) {
        if (err) {
          return callback(new Error(err));
        }
        bcrypt.hash(newPassword, numSaltRounds, function(err, hash) {
          if (err) { return callback(err); }
          connection.execute(
            ' select password as "password" = : hash, ' +
            ' from jsao_users ' +
            ' where email = :email ', [hash, email], { autoCommit: true },
            function(err, result) {
              if (err) {
                console.log(err);
                doRelease(connection);
                return callback(new Error(err));
              }
              doRelease(connection);
              callback(null, result.rowsAffected > 0);
            });
        });

        // Note: connections should always be released when not needed
        function doRelease(connection) {
          connection.close(
            function(err) {
              if (err) {
                console.error(err.message);
              }
            });
        }
      });
}

这是我得到错误的部分:

 bcrypt.hash(newPassword, numSaltRounds, function(err, hash) { //this is the line
          if (err) { return callback(err); }
          connection.execute(
            ' select password as "password" = : hash, ' +
            ' from jsao_users ' +
            ' where email = :email ', [hash, email], { autoCommit: true },
            function(err, result) {
              if (err) {
                console.log(err);
                doRelease(connection);
                return callback(new Error(err));
              }
              doRelease(connection);
              callback(null, result.rowsAffected > 0);
            });
        });

1 个答案:

答案 0 :(得分:0)

在将newPassword作为数字传递时,会出现此错误。 因此,最好将newPassword作为字符串传递,也可以将newPassword转换为类似newPassword.toString()的字符串。

示例。

  let newPassword = newPassword.toString();

  bcrypt.hash(newPassword, numSaltRounds, function(err, hash) {});