我正在开发一个Node.js
应用程序,该应用程序需要使用来自Laravel
应用程序的相同数据库信息进行登录。
我已经读过BCrypt
,并试图将其与数据库中存储的Laravel
生成的哈希密码进行比较。
因此,根据BCrypt
的文档,我需要执行以下操作:
var salt = bcrypt.genSaltSync(saltRounds);
var hash = bcrypt.hashSync(myPlaintextPassword, salt);
但是我不知道如何使用Laravel
中完全相同的盐来哈希密码。我需要使用 APP_KEY 来做到这一点吗?
答案 0 :(得分:1)
据我了解,盐作为哈希的一部分存储。
所以为什么不将纯文本与存储的哈希值进行比较。
尝试以下操作(来自bcrypt文档):
bcrypt.compare(myPlaintextPassword, hash, function(err, res) {
// res == true
});
hash
是Laravel
数据库中的用户密码哈希值。
例如:
var pass_hash = '$2y$12$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")}
});
答案 1 :(得分:0)
我喜欢答案here。比我想象的要容易。
var hash = '$2y$08$9TTThrthZhTOcoHELRjuN.3mJd2iKYIeNlV/CYJUWWRnDfRRw6fD2';
var bcrypt = require('bcrypt');
hash = hash.replace(/^\$2y(.+)$/i, '$2a$1');
bcrypt.compare("secret", hash, function(err, res) {
console.log(res);
});