javascript - Error: Uncaught, unspecified "error" event. (Not a valid BCrypt hash.) -


i trying create api login in nodejs.but when check login route via http requester showing nothing in output , command line showing error error: uncaught, unspecified "error" event. (not valid bcrypt hash.) , find out password not stored in database in encrypted/hash form.

the project structure: enter image description here

server.js file:

var express    = require('express');  var app        = express();  var port       = process.env.port||8080;  var morgan     = require('morgan');  var mongoose   = require('mongoose');  var bodyparser = require('body-parser');  var router     = express.router();  var approutes  = require('./app/routes/api')(router);  var path       = require('path');    app.use(morgan('dev'));  app.use(bodyparser.json());   app.use(bodyparser.urlencoded({ extended: true }));   app.use(express.static(__dirname + '/public'));  app.use('/api',approutes);      mongoose.connect('mongodb://localhost:27017/tutorial', function(err){  	if(err) {  		console.log('not connected database: '+ err);  	}  	else {  		console.log('succesfully connected mongodb');  	}  });    app.get('*',function(req,res){       res.sendfile(path.join(__dirname + '/public/app/views/index.html'));  });    app.listen(port, function () {  	console.log('running server on port ' + port);  });   

/app/models/user.js:

var mongoose = require('mongoose');  var schema   = mongoose.schema;  var bcrypt   = require('bcrypt-nodejs');     var userschema = new schema({     username: { type: string, lowercase: true, required: true, unique: true },     password: { type: string, required: true },     email: { type: string, lowercase: true, required: true, unique: true }    });    userschema.pre('save', function(next) {    var user = this;    bcrypt.hash(user.password, null, null, function(err, hash) {      if (err) return next(err);      user.password = hash;       next();  });    next();  });    userschema.methods.comparepassword = function(password) {      return bcrypt.comparesync(password, this.password);   };      module.exports = mongoose.model('user', userschema);     

/app/routes/api.js:

var user       =require('../models/user');    module.exports = function(router) {    //http://localhost:8080/api/users    //user registration route    router.post('/users', function(req,res){      var user = new user();      user.username = req.body.username;      user.password = req.body.password;      user.email    = req.body.email;    if (req.body.username == null ||  req.body.username == '' || req.body.email == null || req.body.email == ''|| req.body.password == null  || req.body.password == ''  ){      res.send('ensure username, email , password provided');        } else {          user.save(function(err){        if(err){         res.send('username or email exist');        }        else {          res.send('user created!!!')        }      });    }        });     //user login route     //http://localhost:8080/api/authenticate     router.post('/authenticate',function(req,res) {         user.findone({ username: req.body.username }).select('email username password').exec(function(err,user){          if (err) throw err;          if (!user){            res.json({ success: false, message: 'could not authenticate user'});          }else if(user){               var validpassword = user.comparepassword(req.body.password);               if(!validpassword){                res.json({ success: false, message: 'could not authenticate user'});               }else {                res.json({ success: true, message: 'user authenticate!!!'});               }          }         });     });      return router;  }

http requester (it working fine register api in /app/models/api.js){and user succesfully registered} enter image description here

terminal:

enter image description here

database:(where password not stored in hash dont know why maybe main problem)

enter image description here

your code calls next() twice in pre-save function, remove followed:

userschema.pre('save', function(next) {   var user = this;   bcrypt.hash(user.password, null, null, function(err, hash) {     if (err) return next(err);     user.password = hash;      next(); });   next(); // function remove }); 

Comments

Popular posts from this blog

python - Selenium remoteWebDriver (& SauceLabs) Firefox moseMoveTo action exception -

html - How to custom Bootstrap grid height? -

transpose - Maple isnt executing function but prints function term -