NODE.JS - 如何使用 bcrypt 检查 Laravel 散列密码?

NODE.JS - How to check a Laravel hashed password with bcrypt?

我正在开发一个 Node.js 应用程序,它需要使用来自 Laravel 应用程序的相同数据库信息登录。

我读过有关 BCrypt 的文章,并尝试使用它来比较它生成的散列密码与存储在数据库中的 Laravel 密码。

所以,根据 BCrypt 的文档,我需要做这样的事情:

var salt = bcrypt.genSaltSync(saltRounds);
var hash = bcrypt.hashSync(myPlaintextPassword, salt);

但我不知道如何使用 Laravel 中完全相同的盐来散列我的密码。我需要使用 APP_KEY 来执行此操作吗?

据我了解,盐是作为散列的一部分存储的。

那么为什么不直接将纯文本与存储的哈希进行比较呢。

尝试以下操作(来自 bcrypt 文档):

bcrypt.compare(myPlaintextPassword, hash, function(err, res) {
    // res == true
});

hash 将是 Laravel 数据库中的用户密码哈希值。

例如:

var pass_hash = 'y$Z3Dk1YAzNsdXxq8EKNQxluqGglI6dvncfJxDj0mZHh7zceX2XoX/W'
var pass_string = '1234'
bcrypt.compare(pass_string, pass_hash,(err,valid)=>{
 if(valid){console.log("valid password match")}
 else{console.log("wrong credentials")}
});

我找到了答案here。这比我想象的要容易得多。

var hash = 'yTTThrthZhTOcoHELRjuN.3mJd2iKYIeNlV/CYJUWWRnDfRRw6fD2';
var bcrypt = require('bcrypt');
hash = hash.replace(/^$2y(.+)$/i, 'a');
bcrypt.compare("secret", hash, function(err, res) {
    console.log(res);
});