這是我如何散列並將我的密碼存儲在數據庫中。使用節點j無法驗證Express中的散列密碼
NEWUSER功能
var salt = bcrypt.genSaltSync(10);
var hash = bcrypt.hashSync(password, salt);
var query="INSERT into user(email,firstname,lastname,logintime,gender,password) VALUES('"+email+"','"+firstname+"','"+lastname+"','"+logintime+"','"+gender+"','"+hash+"')";
這是我如何檢索和檢查,以驗證
VALIDATE功能
var query = "SELECT password from user where email='" + email + "'";
connection.query(query,function(err,result){
if(err)
{
console.log("ERROR:"+err.message);
}
else
{
if(result.length!==0)
{
var hash=JSON.stringify(result[0].password); console.log(hash);
console.log(bcrypt.compareSync(password,hash));
if(bcrypt.compareSync(password, hash)) { callback(err, result); }
這始終顯示錯誤,但如果我這樣做是顯示預期結果
var hash = bcrypt.hashSync("sacjap", 8);
//var hash=JSON.stringify(result[0].password);
console.log(hash);
console.log(bcrypt.compareSync(password,hash));
if(bcrypt.compareSync(password, hash))
{
callback(err, result);
}
所以問題是,每當我從數據庫中得到的密碼不起作用。 PLZ幫助
感謝您的幫助。是的,你是對的。所以我改變了我的代碼: –
var hash = JSON.stringify(result [0] .password); \t \t \t \t console.log(hash); \t \t \t \t console.log(bcrypt.compareSync(password,hash)); \t \t \t \t如果(bcrypt.compareSync(密碼,哈希值)) \t \t \t \t \t { \t \t \t \t回調(ERR,結果); \t \t \t \t \t} –
但crypt.compare顯示錯誤,即使當我把正確的密碼。有什麼想法嗎? –