2017-05-12 14 views
1

プロジェクトの場合、ユーザーがいなくても、データベースに暗号化されたパスワードを保管したいと考えています。だから、Sails.js - パスワードを暗号化

私は、ユーザーを追加するときにパスワードを暗号化する必要があるので、私はあなたの助けが必要ですが、私はsails liftを起動したとき、私は、端末にエラーがあります。

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

構成:私は

Sails 1.0 BetaBcrypt 1.0.2を使用してください。

モデル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(); 
      } 
     }); 
    }); 
} 
}; 

私はパスワードを暗号化するために、古い方法を使用していると思うが、私は知らないか、これを行うための別の方法を見つけることができません。

ありがとうございます。

+0

'bcrypt'はそれだけでひどく命名され、暗号化ではありません。それは実質的なCPUの計算時間を含むパスワード用に設計された暗号化ハッシュ法であり、安全な方法です。要点は、攻撃者が無差別にパスワードを見つけるのに多くの時間を費やすことです。 – zaph

答えて

0

エラーは、暗号化とは関係ありません。あなたのモデルを見て、toJSON関数に注目してください。エラーメッセージが示すように、これはインスタンスメソッドであり、サポートされなくなりました。提案通り:customToJSONモデル設定を使用します。私はあなたがドキュメントでそれを見つけることができると確信しています。

0

私は、この質問は古いことを知っていますが、これはうまくいけば、いくつかの光を放つでしょう。

Sails 1.0以降、インスタンスメソッドはサポートされなくなりました。ドキュメントには、代わりにcustomToJSONを使用する必要があることが示唆されていますが、属性の外で使用する必要があることは明確ではありません。

customToJSONを使用すると、データを送信する前にカスタム関数でデータを文字列化できます。 あなたの場合は、パスワードを省略することをお勧めします。 customToJSONを使用すると、thisキーワードを使用して、返されたオブジェクトにアクセスできます。このオブジェクトを変更しないことをお勧めします。intseadはコピーを作成します。

だからあなたの例のためにあなたが使用したい:

module.exports = { 

    attributes: {...}, 

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

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

}; 
関連する問題