2017-03-29 7 views
0

まだnodejsで新しくなっています。 bcryptとbookshelfを使用して、パスワードをデータベースに格納する前にハッシュしようとしています。私は、bcryptとbookshelfを使用してハッシュされたパスワードをデータベースに保存できません

create(data) { 
    this.logger.info(`creating account`); 
    return bookshelf.transaction(trx => { 
     return new Account().save(data, { method: 'insert', transacting: trx }); 
    }); 
} 

と勘定モデルのように保存するアクションを呼び出すい

かなりまっすぐ前方右...、私は私が見てきた

initialize: function() { 
    let _this = this; 
    const saltRounds = 10; 
    _this.on('creating', function() { 
     bcrypt.genSaltSync(saltRounds, function(err, salt) { 
      bcrypt.hashSync(_this.get('password'), salt, function (err, hash) { 
       if (err) throw err; 

       _this.set('password', hash); 
      }); 
     }); 
    }); 
} 

アクションを保存すべてを傍受します今のところこれはうまくいくはずだが、平文のパスワードはハッシュされたパスワードの代わりにデータベースに保存されている。私は間違って何をしていますか?

答えて

0

を延期します使用して、しかし、彼らにコールバックを渡しているため、エラーがあると信じて呼び出される(したがって、パスワードは置き換えられません)。

このお試しください:

initialize: function() { 
    const saltRounds = 10; 
    this.on('creating',() => { 
    let salt = bcrypt.genSaltSync(saltRounds); 
    let hash = bcrypt.hashSync(this.get('password'), salt); 
    this.set('password', hash); 
    }); 
} 

または(bcryptbookshelfの両方でサポートされている)の約束を使用して、非同期のものと同期機能を置き換える:

initialize: function() { 
    const saltRounds = 10; 
    this.on('creating',() => { 
    return bcrypt.genSalt(saltRounds).then(salt => { 
     return bcrypt.hash(this.get('password'), salt); 
    }).then(hash => { 
     this.set('password', hash); 
    }); 
    }); 
} 
+0

どうもありがとうメイト、メソッドの仕事の両方をすばらしいです! – user3010617

0

私はわからないが、私は「勝っているあなたは、ES6はせずVAR は、このの文脈あなたは、同期機能を使用している

関連する問題