javascript 使用带有promises的bcrypt来散列密码,然后验证它
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript 使用带有promises的bcrypt来散列密码,然后验证它相关的知识,希望对你有一定的参考价值。
let bcrypt = require('bcrypt-nodejs');
let password = "hello";
let stored_hash = "";
// first generate a random salt
function genSalt(password) {
return new Promise((resolve,reject) => {
bcrypt.genSalt(10,function(err,salt) {
if (err) {
reject(err);
}
else {
resolve({
salt:salt,
password:password
});
}
});
});
}
// hash the password with the salt
function genHash(salt,password) {
return new Promise((resolve,reject) => {
bcrypt.hash(password,salt,null,function(err,hash) {
if (err) {
reject(err);
}
else {
resolve({
salt:salt,
password:password,
hash:hash
});
}
});
});
}
// execute in sequence
console.log("store");
genSalt(password)
.then(function(result) {
return genHash(result.salt,result.password);
})
.then(function(result) {
console.log('store hash in user profile :', result);
stored_hash = result.hash;
})
.catch(function(err) {
console.log(err);
});
// =====================================================
function lookupUser(user,passwd) {
return new Promise((resolve,reject) => {
// lookup the user in the stored database
// in this case its not async so just resolve with the stored hash
resolve({
user:user,
password:passwd,
hash1:stored_hash
})
})
}
function reHash(user,password,hash1) {
let salt = hash1.substr(0,30);
return new Promise((resolve,reject) => {
bcrypt.hash(password,salt,null,function(err,hash2) {
if (err) {
reject(err);
}
else {
resolve({
user:user,
salt:salt,
password:password,
hash1:hash1, // stored hash
hash2:hash2 // generated hash
});
}
});
});
}
// lookup and verify
setTimeout(function() {
console.log("verify");
lookupUser("joe",password)
.then(function(result) {
return reHash(result.user,result.password,result.hash1);
})
.then(function(result) {
console.log(result.hash1);
console.log(result.hash2);
if (result.hash1 === result.hash2) {
console.log('verified');
}
else {
console.log('failed');
}
})
.catch(function(err) {
console.log(err);
});
},1000);
以上是关于javascript 使用带有promises的bcrypt来散列密码,然后验证它的主要内容,如果未能解决你的问题,请参考以下文章
Javascript 像 Java 8 上的“Promise.all”(可能带有 lambdas)
带有 Fetch 的 Javascript Promise 在 Stripe API 的实现中导致“未定义”
在 Javascript 中捕获 Promise.all() 的解决方案
JavaScript Promise 中的执行顺序是啥?
如何链接原生 Javascript Promise?
ES6 Promises