2

次のコードを使用して、DB に保存する前にユーザー パスワードをハッシュ (できればソルト) します。

// hash the password before the user is saved
ConsultantSchema.pre('save', function(next) {
  var user = this;

  // hash the password only if the password has been changed or user is new
  if (!user.isModified('password')) return next();

  // generate the hash
  bcrypt.hash(user.password, null, null, function(err, hash) {

    if (err) {
      logger.error("bcrypt.hash "+err);
      return next(err);
    } 

    // change the password to the hashed version
    user.password = hash;
    next();
  });
});

私が混乱しているのは、その部分です

bcrypt.hash(user.password, null, null, function(err, hash) {

私はチュートリアルからこのコードを取得しましたが、答えを探していることがよくあります。bcrypt のドキュメント ( https://www.npmjs.com/package/bcrypt )に基づいて、次のコードを期待していました

const saltrounds = 10;
bcrypt.hash(user.password, saltRounds, function(err, hash) {

動作していますが、これによりプログラムがエラーなしで中断されます。

私の質問は次のとおりです。なぜ2つの「null」引数があるのですか? それらは何のため?ハッシュは、2 つの null を含むコードに基づいてソルトされていますか?

助けてくれてありがとう!

4

3 に答える 3

2

bcryptbcrypt-nodejsには違いがあります。次のコードは、npmjs.com のドキュメントからのものです。

bcrypt ハッシュ

bcrypt.hash(myPlaintextPassword, salt, function(err, hash)

また

bcrypt.hash(myPlaintextPassword, saltRounds, function(err, hash)

bcrypt-nodejs ハッシュ

bcrypt.hash(myPlaintextPassword, null, null, function(err, hash)

説明

bcrypt-nodejsではなく、bcryptのドキュメントを見ています。node.js を使用している場合は、bcrypt-nodejs を使用する可能性が高くなります。その機能を利用した複数のプロジェクトがあります。2 つのnullフィールドは、salt と progress 用です。

  • salt - [必須] - パスワードのハッシュに使用するソルト。
  • progress - 進行状況を示すためにハッシュ計算中に呼び出されるコールバック
于 2017-06-28T08:39:41.670 に答える
1

ハッシュに暗号ライブラリを使用しましたが、うまく機能します。ここに私のコードスニペットがあります

var salt = crypto.randomBytes(128).toString('base64');
var iterations = 10;
var keylen = 20;
crypto.pbkdf2(args.password, salt, iterations, keylen, function(succes, bcryptedPassword) {
                    console.log(bcryptedPassword.toString());
                    //Do actions here

                });

役立つかどうかを確認してください

于 2017-06-28T08:39:26.927 に答える
0

次の構文は、(放棄された?) bcrypt-nodejs モジュール1からのものです。

bcrypt.hash(user.password, null, null, function(err, hash) {

bcrypt モジュール2のドキュメントを参照してください。

正しいモジュールを使用していることを確認してください。

于 2017-06-28T08:38:31.857 に答える