2017-05-12 6 views
1

Für ein Projekt brauche ich Benutzer und ich möchte ein verschlüsseltes Passwort in der Datenbank speichern.Sails.js - Passwort verschlüsseln

Also ich brauche Ihre Hilfe, weil ich das Kennwort verschlüsseln müssen, wenn ich einen Benutzer hinzufügen, aber ich habe einen Fehler in das Terminal, wenn ich sails lift starten:

In model `user`: 
The `toJSON` instance method is no longer supported. 
Instead, please use the `customToJSON` model setting. 

Konfiguration:

Ich bin unter Verwendung der Sails 1.0 Beta und Bcrypt 1.0.2.

Modell user.js

/** 
* User.js 
* 
* @description :: A model definition. Represents a database 
table/collection/etc. 
* @docs  :: https://sailsjs.com/docs/concepts/models-and- 
orm/models 
*/ 

var bcrypt = require('bcrypt'); 


module.exports = { 


attributes: { 
    firstname: { 
     type: 'string' 
    }, 
    lastname: { 
     type: 'string' 
    }, 
    password: { 
     type: 'string' 
    }, 
    email: { 
     type: 'string', 
     unique: true 
    }, 
    code: { 
     type: 'string', 
     unique: true 
    }, 
    referring: { 
     type: 'string' 
    }, 
    comment: { 
     type: 'text' 
    }, 
    // Add reference to Profil 
    profil: { 
     model: 'profil' 
    }, 
    toJSON: function() { 
     var obj = this.toObject(); 
     delete obj.password; 
     return obj; 
    } 
}, 
beforeCreate: function(user, cb) { 
    bcrypt.genSalt(10, function(err, salt) { 
     bcrypt.hash(user.password, salt, function(err, hash) { 
      if (err) { 
       console.log(err); 
       cb(err); 
      } else { 
       user.password = hash; 
       cb(); 
      } 
     }); 
    }); 
} 
}; 

Ich glaube, ich bin eine alte Art und Weise mit dem Passwort zu verschlüsseln, aber ich weiß nicht, oder keinen anderen Weg, dies zu tun finden.

Vielen Dank im Voraus

+0

'bcrypt' ist keine Verschlüsselung, ist es nur schlecht benannt. Es ist eine kryptografische Hash-Methode, die für Passwörter entwickelt wurde und eine beträchtliche CPU-Rechenzeit beinhaltet. Sie ist eine sichere Methode. Es geht darum, den Angreifer dazu zu bringen, viel Zeit mit der Suche nach Passwörtern zu verbringen. – zaph

Antwort

0

Der Fehler, den Sie nichts mit der Verschlüsselung zu tun zu sehen hat. Schau in dein Modell und notiere die toJSON-Funktion. Wie die Fehlermeldung anzeigt, handelt es sich um eine Instanzmethode, die nicht mehr unterstützt wird. Tun Sie es wie vorgeschlagen: Verwenden Sie die Modelleinstellung customToJSON. Ich bin sicher, Sie werden es in der Dokumentation finden.

0

Ich weiß, dass diese Frage alt ist, aber hoffentlich wird dies etwas Licht werfen.

Ab Sails 1.0 werden Instanzmethoden nicht mehr unterstützt. Die Dokumentation schlägt vor, dass Sie stattdessen customToJSON verwenden sollten, aber es stellt nicht klar, dass Sie es außerhalb der Attribute verwenden sollten.

Mit customToJSON können Sie die Daten vor dem Senden mit einer benutzerdefinierten Funktion verknüpfen. In Ihrem Fall sollten Sie das Passwort weglassen. Mit customToJSON können Sie das Schlüsselwort this verwenden, um auf das zurückgegebene Objekt zuzugreifen. Es wird empfohlen, dieses Objekt nicht zu mutieren, indem Sie eine Kopie erstellen. So für Ihr Beispiel

würden Sie verwenden:

module.exports = { 

    attributes: {...}, 

    customToJSON: function() { 
    return _.omit(this, ['password']) 
    }, 

    beforeCreate: function(user, cb) {...} 

}; 
Verwandte Themen