2017-09-29 9 views
0

bcryptと私のアプリケーションでPromiseインターフェイスを実装しています。パスワードを比較するとBcryptがfalseになります

私はパスワードを比較しようとしているとき、同じパスワードであっても、私は虚偽を取得します。

const bcrypt = require('bcrypt'); 
const saltRounds = 10; 
const password = 'secret'; 
const resHash = '' 
/** 
* Generate Password 
*/ 
bcrypt.hash(password, saltRounds).then((res) => { 
    console.log(res) 
    this.resHash = res 
}).catch(err => { 
    console.log(err) 
}) 

/** 
* Compare Password 
*/ 
bcrypt.compare(password, resHash).then((res) => { 
    console.log("Comparison result: " + res) 
}).catch(err => { 
    console.log(err) 
}) 

私は次の出力を取得しています:

Comparison result: false 
boolean 
$2a$10$n0mnrLHT3rRkREKB8RJXouMFrhNQjqOFeN7Sq.a.BYXigdBhcBkfq 

私が間違って上記の例ではやっているものを任意の提案を?

答えて

1

上記のコードを実行している場合と同じように、パスワード比較がすぐに実行され、最初の約束が解決されるのを待つことがないため、このコードを実行すると機能しません。また、resHashという定数に設定するのではなく、let resHashに設定する代わりに、this.resHashを設定しています。

const bcrypt = require('bcrypt'); 
const saltRounds = 10; 
const password = 'secret'; 
let resHash = '' 
/** 
* Generate Password 
*/ 
bcrypt.hash(password, saltRounds).then((res) => { 
    resHash = res; 
    return bcrypt.compare(password, resHash); 
}).then(matches => { 
    console.log('Matches', matches) // true 
}).catch(err => { 
    console.log(err) 
}) 
1

bcrypt生成された塩は、まずハッシュ法に入力する前に使用する必要があります。

const bcrypt = require('bcrypt'); 
const saltRounds = 10; 
const password = 'secret'; 
let resHash = ''; 

bcrypt.genSalt(saltRounds).then(generatedSalt => { 
    bcrypt.hash(password, generatedSalt).then(res => { 
     console.log(res) 
     resHash = res; 
    }).catch(err => { 
     console.log(err); 
    }); 
}).catch(err => { 
    console.log(err); 
}); 

// a promise is async. this will not sequentially be executed 
// to test. use delay 
setTimeout(function() { 
    bcrypt.compare(password, resHash).then(res => { 
     console.log("Comparison result: " + res) 
    }).catch(err => { 
     console.log(err) 
    }); 
}, 2000); 

詳細はBcrypt Github Pageを確認してください。

+0

私のコードを関数に追加してください – mrquad

関連する問題