MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Memorizzazione delle password con Node.js e MongoDB

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

bcrypt è uno dei pochi algoritmi focalizzati su questo caso d'uso. Non dovresti mai essere in grado di decrittografare le tue password, ma verifica solo che una password in chiaro immessa dall'utente corrisponda all'hash memorizzato/crittografato.

bcrypt è molto semplice da usare. Ecco uno snippet dal mio schema utente Mongoose (in CoffeeScript). Assicurati di utilizzare le funzioni asincrone poiché bycrypt è lento (apposta).

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

Inoltre, leggi questo articolo, che dovrebbe convincerti che bcrypt è una buona scelta e aiutarti a evitare di diventare "bene e veramente effed".