在node.js中使用Async或Sync bcrypt函数以生成哈希值?

时间:2012-07-23 03:00:59

标签: node.js asynchronous bcrypt

我目前正在尝试在node.js中为我的项目制作身份验证模块?

我已经看过一些使用bcrypt生成哈希的例子,即

https://github.com/bnoguchi/mongoose-auth/blob/master/lib/modules/password/plugin.js https://github.com/Turbo87/locomotive-passport-boilerplate/blob/master/app/models/account.js

但是,出于某种原因,他们正在使用bcrypt.hashSync()函数。由于bcrypt是好的,因为它耗时,为了不阻塞代码,使用异步函数不是更明智,即:

User.virtual('password')
.get( function () {
    return this.hash;
})
.set( function (password) {
    bcrypt.hash('password', 10, function(err, hash) {
        this.hash = hash;
    });
});

请您解释一下哪种方式更好,为什么?谢谢!

2 个答案:

答案 0 :(得分:7)

是的,如果可能,您希望使用异步版本,这样您就不会在密码哈希期间占用节点处理。在您引用的两个源代码中,代码都使用同步版本,因为它在其中使用的方法是同步的,因此作者别无选择,只能使用同步版本。

答案 1 :(得分:2)

您无法在同步方法内进行异步调用。设置密码时尝试使用单独的方法。

我刚刚提交了一个拉取请求,所以有人的项目正是这样做的。请在此处查看:https://github.com/nickpoorman/CrowdNotes/commit/e268c80a9cacddbc0215bf0e2b7aa31c0a4c785f