我正在从MySQL中的前端为注册用户输入密码。现在,当im登录时,我希望使用bcrypt-nodejs将输入的密码与数据库中原始存储的密码进行比较。但不能这样做。我是Node.js的初学者,请帮忙!!
这段代码在我的server.js文件中,它是主节点服务器文件。
app.post('/signin', (req,res)=>{
const {email} = req.body;
let post= {email: email};
let sql= 'SELECT password FROM users WHERE email= ?';
let query= db.query(sql, post,(error,result)=>{
if(error)
{
throw error;
}
else if(!error)
{
bcrypt.hash(result, null,null, function(err,res){
});
bcrypt.compare(req.body.password, hash, (err,res)=>{
if(err)
{
throw error;
}
else if(res)
{
res.send('signin successful');
}
}
else {
res.status(400).json('error logging in');
}
//res.json('signin');
});
})
})
正如您所看到的,Im试图对来自数据库的口令结果进行散列,并将其与用户从前端输入的req.body.password进行比较,但在控制台中出现错误
让我们用async/await
稍微重写一下,使其更易读
app.post('/signin', async (req, res) => {
const { email } = req.body;
let post = { email: email };
let sql = 'SELECT password FROM users WHERE email= ?';
const queryResult = await new Promise(resolve => db.query(sql, post, (error, result) => resolve(result)));
// I assume you should access here your hash with something like this queryResult.password`
const hashStoredInDb = queryResult.password;
const compareResult = await new Promise(resolve => bcrypt.compare(req.body.password, hashStoredInDb, (err, res) => resolve(res)));
// Your other verification logic based on compare result.
})
因此,主要的逻辑是将已存储在db中的散列密码与用户提供的散列密码进行比较。
此外,您还可以在提供的代码中添加一些验证,为了简单和可读性,我错过了一些try/catch
。
问题内容: 我有一个脚本化的管道,可以使用该功能请求用户的密码,并将其与用户保存的凭据密码短语进行比较。如果用户输入是一种类型,则可以使用。但是,当我将输入类型更改为(因此用户输入时在屏幕上看不到该输入类型)时,它将失败并显示断言错误。 我确保输入与凭证文件中的密码匹配的密码。 我正在将Jenkins 2.83与最新的Credentials插件和Credentials绑定插件一起使用。 脚本: 我
问题内容: 我想用散列密码,以后再验证提供的密码是否正确。 散列密码很容易: 如何将纯文本密码与存储的哈希值进行比较? 问题答案: 使用py-bcrypt,您不需要单独存储盐:将盐存储在哈希中。 您可以简单地将哈希用作盐,盐将存储在哈希的开头。
我有一个网页,使用bcrypt加密用户名密码,这些密码然后存储在数据库中。我有一个运行在QT上的C++程序,它需要对用户进行身份验证,为了做到这一点,我必须加密用户输入的密码,并将其与数据库中的密码进行比较。这是正确的做法吗?如果是的话,我该如何做到这一点?用户输入的密码的加密必须与bcrypt的加密相同,我如何做到这一点?提前道谢。
我的应用程序中有一个用例,它应该防止用户在重置密码时选择最后3个密码中的一个。我使用Angular作为前端,spring boot作为后端。在我的场景中,用户密码存储为bcrypt哈希。 如何将用户输入的密码与最近3个存储的bcrypt密码进行比较? 当我运行下面的代码片段示例时, 它生成以下bcrypt哈希。每个散列都是不同的,这是合理的,因为当我检查时,我可以看到生成的salt是随机值。 sp
鉴于: $salt—一个伪随机生成的字符串,长度足够长 $Pepper-一个足够强的私钥,只有存储口令的数据库管理员知道 你会看到吗 ########################################################################################################### 有意义地优于 $hash=bcrypt($user
在对UserDetailsService的自定义实现使用Bcrypt之前,我首先想看看是否可以在内存数据库中使用它。 创建/公开PasswordEncoder bean时,会弹出此警告,最终阻止我访问登录路径: 添加不推荐使用的NoOpPasswordEncoder将暂时解决此问题,但显然不会对密码进行编码: 添加Bcrypt的正确方法是什么?