我正在使用bcrypt
在我的应用程序中实现Promise接口。
当我尝试比较密码时,即使密码相同,我也会收到错误。
const bcrypt = require('bcrypt');
const saltRounds = 10;
const password = 'secret';
const resHash = ''
/**
* Generate Password
*/
bcrypt.hash(password, saltRounds).then((res) => {
console.log(res)
this.resHash = res
}).catch(err => {
console.log(err)
})
/**
* Compare Password
*/
bcrypt.compare(password, resHash).then((res) => {
console.log("Comparison result: " + res)
}).catch(err => {
console.log(err)
})
我得到以下输出:
Comparison result: false
boolean
$2a$10$n0mnrLHT3rRkREKB8RJXouMFrhNQjqOFeN7Sq.a.BYXigdBhcBkfq
我在上面的例子中做的任何建议是错误的吗?
答案 0 :(得分:1)
在将它加到哈希方法之前,你必须首先使用bcrypt生成的盐。
const bcrypt = require('bcrypt');
const saltRounds = 10;
const password = 'secret';
let resHash = '';
bcrypt.genSalt(saltRounds).then(generatedSalt => {
bcrypt.hash(password, generatedSalt).then(res => {
console.log(res)
resHash = res;
}).catch(err => {
console.log(err);
});
}).catch(err => {
console.log(err);
});
// a promise is async. this will not sequentially be executed
// to test. use delay
setTimeout(function () {
bcrypt.compare(password, resHash).then(res => {
console.log("Comparison result: " + res)
}).catch(err => {
console.log(err)
});
}, 2000);
查看lifecycles了解详情。
答案 1 :(得分:1)
如果您正在执行上述代码,就像您在此处执行代码一样,它将无法正常工作,因为密码比较会立即触发,而不是等待第一个解决的承诺。此外,您设置的是this.resHash
,而不是尝试设置常量resHash
,而let resHash
应为const bcrypt = require('bcrypt');
const saltRounds = 10;
const password = 'secret';
let resHash = ''
/**
* Generate Password
*/
bcrypt.hash(password, saltRounds).then((res) => {
resHash = res;
return bcrypt.compare(password, resHash);
}).then(matches => {
console.log('Matches', matches) // true
}).catch(err => {
console.log(err)
})
。
http://x.y.z/list?type=0&period=1&min=3000&max=21000&area=6855+7470+7700