2017-05-07 10 views
0

「/ changepassword」のGETリクエストを実装しようとするMEANアプリケーションがあります。このファイルは '/ users/changepassword'にあります。私はパスワードハッシュのためにMongooseとbcryptjsを使用しています。以下の私のコードを見てください。パスワードを変更するパスワードを変更しないリクエストを取得する

これは、これは、内/モデル位置マングースのCHANGEPASSWORD関数である/ユーザー/ CHANGEPASSWORD

// Change Password 
router.post('/changepassword', function(req, res){ 
    var username = req.body.username; 
    var password = req.body.oldPassword; 
    var newPassword = req.body.newPassword; 

    User.getUserByUserName(username, function(err, user){ 
    if(err) throw err; 
    if(user === null){ 
     res.json({success: false, msg: "The given username does not exist."}); 
    }else{ 
     User.comparePassword(password, user.password, function(err, isMatch){ 
     if(err) throw err; 
     if(isMatch) 
     { 
      User.changePassword(user, newPassword,function(err, changedPassword){ 
      if(err) throw err; 
      else{ 
       if(changedPassword === true){ 
       res.json({success: true, msg: "Your password has been changed."}); 
       } 
       else { 
       res.json({success: false, msg: "Your password was unable to be changed."}); 
       } 
      } 
      }); 
     } 
     }); 
    } 
    }); 
}); 

ある/ユーザここ

module.exports.changePassword = function(user, newPassword, callback){ 
    var query = {username: user.username}; 
    bcrypt.genSalt(10, function(err, salt){ 
    bcrypt.hash(user.password, salt, function(err, hash){ 
    if (err) throw err; 
    else{ 
     user.password = hash; 
     User.findOneAndUpdate(query, { $set: { password: user.password }}, {new: true}, function(err, newUser){ 
     if(err) throw err; 
     else{ 
     bcrypt.compare(newPassword, newUser.password, function(err, isMatch){ 
      if(err) throw err; 
      console.log(isMatch); 
      callback(null, isMatch); 
      }); 
     } 
     }); 
    } 
    }); 
}); 
}; 

は/モデル/ユーザ

で使用される全ての他の関数であります
module.exports.getUserByUserName = function(username, callback){ 
    var query = {username: username}; 
    User.findOne(query, callback); 
}; 

module.exports.comparePassword = function(candidatePassword, hash, callback){ 
    bcrypt.compare(candidatePassword, hash, function(err, isMatch){ 
    if(err) throw err; 
    callback(null, isMatch); 
    }); 
}; 

私は郵便番号を使用すると、これは私が受け取った出力です

{ 
    "success": false, 
    "msg": "Your password was unable to be changed." 
} 

ご協力いただきありがとうございます。 :)

答えて

0

何が間違っているかを発見しました!

module.exports.changePassword = function(user, newPassword, callback){ 
    var query = {username: user.username}; 
    bcrypt.genSalt(10, function(err, salt){ 

// it has to be newPassword instead of user.password 
    bcrypt.hash(user.password, salt, function(err, hash){ 

    if (err) throw err; 
    else{ 
     user.password = hash; 
     User.findOneAndUpdate(query, { $set: { password: user.password }}, {new: true}, function(err, newUser){ 
     if(err) throw err; 
     else{ 
     bcrypt.compare(newPassword, newUser.password, function(err, isMatch){ 
      if(err) throw err; 
      console.log(isMatch); 
      callback(null, isMatch); 
      }); 
     } 
     }); 
    } 
    }); 
}); 
}; 

// CORRECT ONE 
module.exports.changePassword = function(user, newPassword, callback){ 
    var query = {username: user.username}; 
    bcrypt.genSalt(10, function(err, salt){ 
    bcrypt.hash(newPassword, salt, function(err, hash){ 
    if (err) throw err; 
    else{ 
     user.password = hash; 
     User.findOneAndUpdate(query, { $set: { password: user.password }}, {new: true}, function(err, newUser){ 
     if(err) throw err; 
     else{ 
     bcrypt.compare(newPassword, newUser.password, function(err, isMatch){ 
      if(err) throw err; 
      console.log(isMatch); 
      callback(null, isMatch); 
      }); 
     } 
     }); 
    } 
    }); 
}); 
}; 
関連する問題