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.
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} 
terminal:
database:(where password not stored in hash dont know why maybe main problem)
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
Post a Comment