sql >> Base de Datos >  >> NoSQL >> MongoDB

Almacenamiento de contraseñas con Node.js y MongoDB

Usa esto:https://github.com/ncb000gt/node.bcrypt.js/

bcrypt es uno de los pocos algoritmos enfocados en este caso de uso. Nunca debería poder descifrar sus contraseñas, solo verifique que una contraseña de texto claro ingresada por el usuario coincida con el hash almacenado/cifrado.

bcrypt es muy fácil de usar. Aquí hay un fragmento de mi esquema de usuario Mongoose (en CoffeeScript). Asegúrese de usar las funciones asíncronas ya que bycrypt es lento (a propósito).

class User extends SharedUser
  defaults: _.extend {domainId: null}, SharedUser::defaults

  #Irrelevant bits trimmed...

  password: (cleartext, confirm, callback) ->
    errorInfo = new errors.InvalidData()
    if cleartext != confirm
      errorInfo.message = 'please type the same password twice'
      errorInfo.errors.confirmPassword = 'must match the password'
      return callback errorInfo
    message = min4 cleartext
    if message
      errorInfo.message = message
      errorInfo.errors.password = message
      return callback errorInfo
    self = this
    bcrypt.gen_salt 10, (error, salt)->
      if error
        errorInfo = new errors.InternalError error.message
        return callback errorInfo
      bcrypt.encrypt cleartext, salt, (error, hash)->
        if error
          errorInfo = new errors.InternalError error.message
          return callback errorInfo
        self.attributes.bcryptedPassword = hash
        return callback()

  verifyPassword: (cleartext, callback) ->
    bcrypt.compare cleartext, @attributes.bcryptedPassword, (error, result)->
      if error
        return callback(new errors.InternalError(error.message))
      callback null, result

Además, lea este artículo, que debería convencerlo de que bcrypt es una buena opción y ayudarlo a evitar que se sienta "realmente afectado".