2017-02-15 84 views
2

我得到一个bcrypt错误,指出需要数据和散列参数,在我的routes.js文件中引用第44行。根据我所知道的,我传递了这样的信息:bcrypt.compare的第一个参数是用户输入的密码,第二个参数是从db中检索的散列密码。我究竟做错了什么?bcrypt错误:需要数据和散列参数

bcrypt.compare(req.params.password, user.password, function... 

routes.js

'use strict' 

var express = require('express'); 
var router = express.Router(); 
var User = require('../app/models/user'); 
//password hashing 
var bcrypt = require('bcrypt'); 

var count = 0; 

router.use(function(req, res, next) { 
    count++; 
    console.log('API hit count = %s', count); 
    next(); 
}); 

// /users post(create new user) get(specific user) 
router.route('/users') 
    .post(function(req,res) { 
     var user = new User(); 
     user.username = req.body.username; 
     user.password = bcrypt.hashSync(req.body.password, 10); 

     //save the user and checkfor errors 
     user.save(function(err) { 
      if (err) { 
       res.send(err); 
      } else { 
       res.json({message: "User created!"}); 
      }  
     }); 

    }) 

router.route('/users/:username') 
    .get(function(req, res) { 
     var query = { 
      username: req.params.username, 
     }; 
     User.findOne(query, function(err, user) { 
      if (err) { 
       res.send(err); 
      } else { 
       bcrypt.compare(req.params.password, user.password, function(err, res) { 
        if(err) { 
         console.log('Comparison error: ', err); 
        } 
       }) 
       res.json(user); 
      } 
     }); 
    }) 
+0

在调用'bcrypt.compare'之前设置一个断点,并查看'req.params.password'和'user.password'是什么。 – bejado

+1

@bejado Dammit,我的app.js中有一个错误,发送一个未定义的密码。感谢您的帮助。 – jmcgui05

回答

7

bcrypt.compare需要3个PARAMS - passwordHash,passwordToCheck回调。

此错误表示前2个参数中的一个为空或未定义。