I am getting a bcrypt error stating that data and hash arguments are required, referencing line #44 in my routes.js file. From what I can tell, I am passing that information: the first parameter to bcrypt.compare is the user entered password, and the second is the hashed password retrieved from the db. What am I doing wrong?
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); } }); })
Advertisement
Answer
bcrypt.compare
takes 3 parameters; passwordToCheck, passwordHash, and a callback, respectively. (Check the documentation for examples)
This error means one or both of the first 2 parameters are either null or undefined. Therefore, make sure both of them are passed correctly. (Not as null or undefined)