MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Armazenando senhas com Node.js e MongoDB


Use isto:https://github.com/ncb000gt/node.bcrypt.js/

bcrypt é um dos poucos algoritmos focados neste caso de uso. Você nunca deve ser capaz de descriptografar suas senhas, apenas verifique se uma senha de texto simples digitada pelo usuário corresponde ao hash armazenado/criptografado.

bcrypt é muito simples de usar. Aqui está um trecho do meu esquema de usuário Mongoose (em CoffeeScript). Certifique-se de usar as funções assíncronas, pois o bycrypt é lento (de 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

Além disso, leia este artigo, que deve convencê-lo de que o bcrypt é uma boa escolha e ajudá-lo a evitar ficar "bem e verdadeiramente esgotado".