BCrypt 错误非法参数:字符串、对象
BCrypt error Illegal arguments: string, object
我正在开发一个基于 NodeJS 和 ReactJS 的 Web 应用程序,我试图在多个路径中散列密码,一个用于注册,另一个用于更改密码。
为此,我在两条路线外生成盐,因此它们都使用相同的盐,如下所示:
const salt = bcrypt.genSalt(10);
现在在路由中,has 是这样生成的:
user.password = await bcrypt.hash(newPassword, salt);
但是当我运行这个时,它给出了以下控制台错误:
非法参数:字符串、对象
当我在各个路由中生成盐时,散列操作工作正常。可能是什么原因?
我猜你是这样打电话给 bcrypt.hash
await bcrypt.hash(newPassword, 10);
这意味着您传递的是轮数,而不是盐。如果你想在调用之外生成盐,你可以这样做
const salt = bcrypt.genSaltSync(10);
然后在bcrypt.hash
中使用。
以防其他人遇到这个问题。
不要忘记像这样等待 genSalt 函数:
const salt = await bcrypt.genSalt(10);
错误:Illegal arguments: string, object
试图解释传递给散列函数的参数之一无效,因为它的类型无效。
在这种情况下,它是第二个参数 (salt),它期望一个 string/number 但接收一个对象 (如果您返回的承诺对象不要 await
).
希望对您有所帮助
查看文档,我认为错误是由于您的 genSalt() 中缺少回调函数引起的。genSaltSync() 在没有回调的情况下运行良好..
我正在开发一个基于 NodeJS 和 ReactJS 的 Web 应用程序,我试图在多个路径中散列密码,一个用于注册,另一个用于更改密码。
为此,我在两条路线外生成盐,因此它们都使用相同的盐,如下所示:
const salt = bcrypt.genSalt(10);
现在在路由中,has 是这样生成的:
user.password = await bcrypt.hash(newPassword, salt);
但是当我运行这个时,它给出了以下控制台错误:
非法参数:字符串、对象
当我在各个路由中生成盐时,散列操作工作正常。可能是什么原因?
我猜你是这样打电话给 bcrypt.hash
await bcrypt.hash(newPassword, 10);
这意味着您传递的是轮数,而不是盐。如果你想在调用之外生成盐,你可以这样做
const salt = bcrypt.genSaltSync(10);
然后在bcrypt.hash
中使用。
以防其他人遇到这个问题。
不要忘记像这样等待 genSalt 函数:
const salt = await bcrypt.genSalt(10);
错误:Illegal arguments: string, object
试图解释传递给散列函数的参数之一无效,因为它的类型无效。
在这种情况下,它是第二个参数 (salt),它期望一个 string/number 但接收一个对象 (如果您返回的承诺对象不要 await
).
希望对您有所帮助
查看文档,我认为错误是由于您的 genSalt() 中缺少回调函数引起的。genSaltSync() 在没有回调的情况下运行良好..