是否有代码模式 return bcrypt hash created with async function to a separate module?
Is there a code pattern to return bcrypt hash created with async function to a separate module?
有没有一种优雅的方法可以将 bcrypt 哈希值 return 到一个单独的模块?
在下面的示例中,函数 hashPassword() 使用 bcrypt 来散列密码。它位于文件 hashpassword.js 中。我想 return 它的哈希值到 app.js 中的变量 myHashedPassword。我敢肯定必须有一种蛮力的方式来做到这一点。但是有没有什么聪明或优雅的方法来 return 这个值?
app.js
let password = '123';
let myHashedPassword = hashPassword(password);
hashpassword.js
function hashPassword(password) {
bcrypt.genSalt(10, function(error, salt) {
bcrypt.hash(password, salt, function(error, hash) {
// In most cases at this point hash is saved to the database.
// However is there a pattern to return its value to the outer function and then app.js?
// With this being async is that even possible?
});
});
}
bcrypt package has synchronous equivalents to the functions you are using, see example。如果您仍然想利用异步版本,那么您需要 return 一个 Promise
然后您可以 await
例如
function hashPassword(password) {
return new Promise((resolve, reject) => {
bcrypt.genSalt(10, (error, salt) => {
if (error) return reject(error);
bcrypt.hash(
password,
salt,
(error, hash) => err ? reject(err) : resolve(hash)
);
});
});
}
...
let hashed = await hashPassword(password);
如果使用 ES6 或更新版本,则以消费者只需调用函数的方式导出
export default function hashPassword(password) {
...
}
否则
function hashPassword(password) {
...
}
module.exports = hashPassword
如果您更喜欢使用开箱即用的非阻塞 bcrypt 函数 await/async:
import bcrypt from 'bcrypt';
const salt = await bcrypt.genSalt(10);
var hash = await bcrypt.hash(clear_text_password, salt);
然后进行身份验证
const match = await bcrypt.compare(clear_text_password, hash);
if(match) { // do something awesome }
有没有一种优雅的方法可以将 bcrypt 哈希值 return 到一个单独的模块?
在下面的示例中,函数 hashPassword() 使用 bcrypt 来散列密码。它位于文件 hashpassword.js 中。我想 return 它的哈希值到 app.js 中的变量 myHashedPassword。我敢肯定必须有一种蛮力的方式来做到这一点。但是有没有什么聪明或优雅的方法来 return 这个值?
app.js
let password = '123';
let myHashedPassword = hashPassword(password);
hashpassword.js
function hashPassword(password) {
bcrypt.genSalt(10, function(error, salt) {
bcrypt.hash(password, salt, function(error, hash) {
// In most cases at this point hash is saved to the database.
// However is there a pattern to return its value to the outer function and then app.js?
// With this being async is that even possible?
});
});
}
bcrypt package has synchronous equivalents to the functions you are using, see example。如果您仍然想利用异步版本,那么您需要 return 一个 Promise
然后您可以 await
例如
function hashPassword(password) {
return new Promise((resolve, reject) => {
bcrypt.genSalt(10, (error, salt) => {
if (error) return reject(error);
bcrypt.hash(
password,
salt,
(error, hash) => err ? reject(err) : resolve(hash)
);
});
});
}
...
let hashed = await hashPassword(password);
如果使用 ES6 或更新版本,则以消费者只需调用函数的方式导出
export default function hashPassword(password) {
...
}
否则
function hashPassword(password) {
...
}
module.exports = hashPassword
如果您更喜欢使用开箱即用的非阻塞 bcrypt 函数 await/async:
import bcrypt from 'bcrypt';
const salt = await bcrypt.genSalt(10);
var hash = await bcrypt.hash(clear_text_password, salt);
然后进行身份验证
const match = await bcrypt.compare(clear_text_password, hash);
if(match) { // do something awesome }