I am trying to save a user to mongodb database using post request as follow, but I got the error bcrypt Error: data and hash arguments required .It's a pretty simple set up of the code but i can't figure out anything wrong with it. models/users.js
const mongoose = require('mongoose'); const bcrypt = require('bcrypt'); const confic = require('../models/users'); // User schema const UserSchema = mongoose.Schema({ name: { type: String, }, email: { type: String, required: true }, username:{ type: String, required: true }, password: { type: String, required: true } }); const User = module.exports = mongoose.model('User', UserSchema); module.exports.getUserById = function(id,callback){ User.findById(id,callback); } module.exports.getUserByUsername = function(username,callback){ const query = {username:username} User.findOne(query,callback); } module.exports.addUser= function (newUser, callback) { bcrypt.genSalt(10,(err,salt) => { bcrypt.hash(newUser.password, salt , (err, hash) =>{ if(err) throw (err); newUser.password=hash; newUser.save(callback); }); }); }
const jwt = require('jsonwebtoken'); User = require('../models/users') // // Register router.post('/register', (req, res, next) => { var newUser = new User({ name: req.body.name, email: req.body.email, username: req.body.username, password: req.body.password }); User.addUser(newUser, (err, User) => { if(err){ // res.json({success: false, msg:'Failed to register user'}); } else { // res.json({success: true, msg:'User registered'}); } }); }); // Authenticate router.post('/authenticate', (req, res, next) => { res.send('AUTHENTICATE'); }); // Profile router.get('/profile', (req, res, next) => { res.send('PROFILE'); }); module.exports = router;
The error comes from the bcrypt.hash
method. In your case, you have the following piece of code :
bcrypt.hash(newUser.password, salt , (err, hash) => { ... }
I think that your problem comes from the newUser.password
that must be empty (null
or undefined
). The error says data and salt arguments required
. It looks like your salt is correctly generated and you didn't check if newUser.password === undefined
, so here's my bet: somehow newUser.password
is undefined.
Also, you can check if the genSalt
method works fine by adding if(err) throw (err);
after calling it as you did for the bcrypt.hash
method.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With