2017-02-04 7 views
1

これは意見に基づいている可能性があります。しかし、私はいくつかのアドバイスをしたいと思います。use bcrypt asyncでSequelizeを使用する

だから、私がしたいことは、this threadに記載された方法で行うことができます。 しかし、this threadは、私が非同期を使用する理由を説明しました。

これまで私がこれまで持っていたことは、動作しています。

User.create({email: req.body.email, password: req.body.password}).catch(function(err){ 
    console.log(err); 
}); 

User.beforeCreate(function(user) { 
    const password = user.password; 
    user.password = ''; 
    bcrypt.genSalt(SALT_WORK_FACTOR, function(err, salt) { 
    if(err) console.error(err); 
    bcrypt.hash(user.password, salt, null, function(err, hash) { 
     if(err) console.error(err); 
     user.password = hash; 
     user.save(); 
    }); 
    }); 
}); 

私はbcrypt asyncを使用しているので、暗号化されたパスワードを別のクエリで保持する必要があります。私のガット感は、bcrypt asyncを続けることでより良い方法があるかもしれないと私に伝えます。

私の質問は、好ましい/より良いアプローチは何ですか?または、私はbcryptを同期して使用するだけで解決するべきですか?

答えて

3

非同期あなたは答えを

function cryptPassword(password, callback) { 
    bcrypt.genSalt(10, function(err, salt) { // Encrypt password using bycrpt module 
     if (err) 
      return callback(err); 

     bcrypt.hash(password, salt, function(err, hash) { 
      return callback(err, hash); 
     }); 
    }); 
} 

User.beforeCreate(function(model, options, cb) { 
    debug('Info: ' + 'Storing the password');  
    cryptPassword(user.password, function(err, hash) { 
    if (err) return cb(err); 
    debug('Info: ' + 'getting ' + hash); 

    user.password = hash; 
    return cb(null, options); 
    }); 
}); 
+0

おかげビットをコーディングし、フックにコールバックを使用し、最大ちょうど整頓移動するための方法です。私がこのアプローチについて気に入らない主な理由は、1人の新規ユーザーを持続させる2つのSQL呼び出しがあることです。 –

+0

ただ1つのsql呼び出しがあります。ここではsaveを呼び出していません.Sql呼び出しが処理される前にデータを変更しています。不要なsave呼び出しを書きました。 –

+0

hmm ...レコードはパスワードハッシュ生成される、いいえ?それは非同期です。 –

関連する問題