ノードを使用してパスワードをbcryptと正常に比較しようとして困惑しています。何かを見逃したのかもしれませんが、アカウントの作成時に、サインアップ メソッド内で次のことを行います (一部のコードは省略されています)。
bcrypt.genSalt(10, function(err, salt) {
if(err) {
}
bcrypt.hash(user.Password, salt, function(err, hash) {
console.log('hashing and saving');
db.query(db insert code, function (error, rows, fields) {
if(error) {
console.log(error);
res.setHeader('500', { 'Content-Type': 'x-application/json'});
res.send({UserId: 0, ErrorMessage: 'Something terrible happened.'});
} else {
console.log('User created : ' + rows.insertId);
res.setHeader('200', { 'Content-Type': 'x-application/json'});
res.send({UserId: rows.insertId});
}
});
});
});
return next();
これはすべてうまくいきます。私のデータベースには暗号化されたパスワードがあります。しかし、ユーザーがサインインすると、bcrypt.compare から成功した結果を得ることができません:
db.query(get account code, function(error, rows, fields) {
if(rows.length == 1) {
bcrypt.compare(request.params.password, rows[0].Password, function(err,res) {
if(err) { console.log(err.toString()); }
if(res == true)
{
response.setHeader('200', { 'Content-Type': 'x-application/json' });
response.send({result: true});
} else {
response.setHeader('401', { 'Content-Type': 'x-application/json' });
console.log('invalid password');
response.send({result:false});
}
});
}
});
return next();
そして、私はいつも無効なパスワードになってしまいます。データベースから取り出したものと比較する前に、クリアテキストのパスワードを取得して再暗号化する必要がありますか?