BCrypt错误非法参数:字符串,对象

时间:2020-04-29 15:00:20

标签: node.js authentication bcrypt

我正在开发一个基于NodeJS和ReactJS的Web应用程序,其中我试图对多条路径中的密码进行哈希处理,一种用于注册,另一种用于更改密码。

为此,我在两条路线之外都生成了盐,因此它们都使用相同的盐,如下所示:

const salt = bcrypt.genSalt(10);

现在在路线内部,这样产生的:

user.password = await bcrypt.hash(newPassword, salt);

但是当我运行它时,它会显示以下控制台错误:

非法参数:字符串,对象

当我在各个路径内生成盐时,哈希运算工作正常。可能是什么原因?

2 个答案:

答案 0 :(得分:0)

我猜你是这样叫bcrypt.hash

await bcrypt.hash(newPassword, 10);

这意味着您传递的是回合数,而不是盐。如果您想在通话之外生成盐,可以执行以下操作

const salt = bcrypt.genSaltSync(10);

然后在bcrypt.hash中使用它。

答案 1 :(得分:0)

万一其他人遇到这个问题。

别忘了像这样等待genSalt函数:

const salt = await bcrypt.genSalt(10);

错误:Illegal arguments: string, object试图解释传递给哈希函数的参数之一无效,因为其类型无效。

在这种情况下,这是第二个参数(salt),该参数需要一个字符串/数字,但是会收到一个对象(如果不使用await,则返回的promise对象)

希望如此?