2012-07-23 14 views
7

Actualmente estoy intentando hacer un módulo de autenticación para mi proyecto en node.js?Función Async o Sync bcrypt para usar en node.js para generar hashes?

ya he visto algunos ejemplos del uso de bcrypt para generar valores hash, es decir

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

Sin embargo, por alguna razón que están utilizando la función bcrypt.hashSync(). Desde bcrypt es bueno porque es mucho tiempo, ¿no sería más prudente utilizar la función asíncrona lugar con el fin de no bloquear el código, es decir:

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

¿Me puede explicar qué camino es mejor y por qué? ¡Gracias!

Respuesta

7

Sí, querría usar la versión asíncrona si es posible para que no esté atando el procesamiento de su nodo durante el hash de la contraseña. En ambos casos de código fuente a los que hace referencia, el código está utilizando la versión síncrona porque el método en el que se utiliza es sincrónico, por lo que el autor no tuvo más remedio que utilizar la versión síncrona.

+3

+1, async es definitivamente la opción correcta; Una cosa a tener en cuenta cuando se usa un ODM como Mongoose es que los getters y setters no pueden ser asincrónicos, por lo que algunos autores usarán métodos sincrónicos dentro de ellos. Este es generalmente el movimiento incorrecto; en el pasado, he usado un método personalizado en el modelo como 'setPassword' para hacer el conjunto de contraseñas asíncronas. –

+0

@BrandonTilley puede dar un ejemplo de su método personalizado? –

+2

@lori Oh tío, ha pasado un tiempo desde que publiqué esto, pero algo así parece cercano: https://gist.github.com/BinaryMuse/7983335 –

Cuestiones relacionadas