Асинхронная или синхронизация функции bcrypt для использования в узле.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 хорош, потому что это занимает много времени, не было бы разумнее использовать асинхронную функцию вместо того, чтобы не блокировать код, i.e:

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

не могли бы вы объяснить мне, какой способ лучше и почему? Спасибо!

2 ответов


Да, вы хотели бы использовать асинхронную версию, если это возможно, поэтому вы не связываете обработку узла во время хэша пароля. В обоих случаях исходного кода Вы ссылаетесь, код использует синхронную версию, потому что метод, который он использует внутри, является синхронным, поэтому у автора не было выбора, кроме как использовать синхронную версию.


вы не можете сделать асинхронный вызов внутри синхронного метода. Попробуйте сделать отдельный метод для использования при установке пароля.

Я только что отправил запрос на вытягивание, поэтому чей-то проект делает именно это. Проверьте это здесь: https://github.com/nickpoorman/CrowdNotes/commit/e268c80a9cacddbc0215bf0e2b7aa31c0a4c785f