Асинхронная или синхронизация функции 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