2012-07-23 10 views
7

Obecnie próbuję utworzyć moduł uwierzytelniania dla mojego projektu w pliku node.js?Asynchronizacja lub funkcja Sync bcrypt do użycia w pliku node.js w celu wygenerowania skrótów?

Już widać kilka przykładów wykorzystania bcrypt do generowania wartości mieszania, to znaczy

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

jednak z jakiegoś powodu są one za pomocą funkcji bcrypt.hashSync(). Od bcrypt jest dobra, ponieważ jest to czasochłonne, nie byłoby rozsądniej korzystać z funkcji asynchronicznej zamiast, aby nie blokować kodu, tj:

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

mógłbyś mi wyjaśnić, w jaki sposób jest lepszy i dlaczego? Dziękuję Ci!

Odpowiedz

7

Tak, warto użyć wersji asynchronicznej, jeśli jest to możliwe, aby nie wiązać przetwarzania węzła podczas haszowania hasła. W obu przypadkach kodu źródłowego, do którego się odwołujesz, kod używa wersji synchronicznej, ponieważ metoda używana w niej jest synchroniczna, więc autor nie miał innego wyboru, jak użyć wersji synchronicznej.

+3

+1, async to zdecydowanie właściwy wybór; należy pamiętać o tym, że używanie ODM, takich jak Mongoose, polega na tym, że moduły pobierające i ustawiające nie mogą być asynchroniczne, więc niektórzy autorzy zamiast tego używają w nich metod synchronicznych. Jest to generalnie zły ruch; w przeszłości użyłem niestandardowej metody w modelu, np. 'setPassword', aby ustawić asynchroniczny zestaw haseł. –

+0

@BrandonTilley możesz podać przykład swojej niestandardowej metody? –

+2

@lori Oh człowieku, minęło trochę czasu, odkąd to opublikowałem, ale coś takiego wydaje się bliskie: https://gist.github.com/BinaryMuse/7983335 –

Powiązane problemy