MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Speichern von Passwörtern mit Node.js und MongoDB

Verwenden Sie dies:https://github.com/ncb000gt/node.bcrypt.js/

bcrypt ist einer von nur wenigen Algorithmen, die sich auf diesen Anwendungsfall konzentrieren. Sie sollten niemals in der Lage sein, Ihre Passwörter zu entschlüsseln, sondern nur überprüfen, ob ein vom Benutzer eingegebenes Klartext-Passwort mit dem gespeicherten/verschlüsselten Hash übereinstimmt.

bcrypt ist sehr einfach zu bedienen. Hier ist ein Ausschnitt aus meinem Mongoose-Benutzerschema (in CoffeeScript). Achten Sie darauf, die async-Funktionen zu verwenden, da bycrypt (absichtlich) langsam ist.

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

Lesen Sie auch diesen Artikel, der Sie davon überzeugen sollte, dass bcrypt eine gute Wahl ist, und Ihnen dabei helfen soll, nicht „wirklich verärgert“ zu werden.