NodeJS data必须是字符串,salt必须是salt字符串或轮数

kb5ga3dv  于 2022-12-26  发布在  Node.js
关注(0)|答案(4)|浏览(140)

这是我得到的错误:错误:数据必须是字符串,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);
            });
        });
iyzzxitl

iyzzxitl1#

当你把newPassword作为数字传递的时候会出现这个错误。所以,最好把newPassword作为字符串传递,或者你可以把newPassword转换成像newPassword.toString()这样的字符串。
例如。

let newPassword = newPassword.toString();

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

fhity93d2#

我在我的用户模型中设置了数字类型的密码。哈希函数需要一个字符串作为第一个参数。设置类型为字符串会有帮助。

ua4mk5z4

ua4mk5z43#

请在加密前将您的明文或req密码转换为字符串。

plaintext = req.body.password.toString();
const hashPassword = await bcrypt.hash(plaintext, salt);
pn9klfpd

pn9klfpd4#

我也收到此错误。我尝试了此方式##标题##。
我们发送的值是整数。因此这是抛出错误{“email”:“vignesh@gmail.com“,“密码”:1234 //这是整数}
所以,我已经修改了整型字符串然后错误消失{“email”:“vignesh@gmail.com“,“密码”:“1234”//这是字符串}
结论:这是预期的字符串值。

相关问题