我正在使用JWT身份验证创建一个用户注册。我正在使用bcrypt-node模块进行密码哈希和腌制。
useraModel.js
var mongoose =require('mongoose');
var Schema =mongoose.Schema;
var bcrypt =require('bcrypt-node');
var UserSchema=new Schema({
name:{type:String, unique:true, required:true},
password:{type:String, required:true}
});
UserSchema.pre('save', function (next) {
var user = this;
if (this.isModified('password') || this.isNew) {
bcrypt.genSalt(10, function (err, salt) {
if (err) {
return next(err);
}
bcrypt.hash(user.password, salt, function (err, hash) {
if (err) {
return next(err);
}
user.password = hash;
next();
});
});
} else {
return next();
}
});
UserSchema.methods.comparePassword = function (passw, cb) {
bcrypt.compare(passw, this.password, function (err, isMatch) {
if (err) {
return cb(err);
}
cb(null, isMatch);
});
};
module.exports = mongoose.model('User', UserSchema);
passport.js
var JwtStrategy =require('passport-jwt').Strategy;
var User =require('../app/models/user');
var config =require('../config/database');
module.exports=function(passport){
var opts = {};
opts.secretOrKey = config.secret;
passport.use(new JwtStrategy(opts, function(jwt_payload, done) {
User.findOne({id: jwt_payload.id}, function(err, user) {
if (err) {
return done(err, false);
}
if (user) {
done(null, user);
} else {
done(null, false);
}
});
}));
};
app.js
apiRoutes.post('/signup', function(req, res) {
if (!req.body.name || !req.body.password) {
res.json({success: false, msg: 'Please pass name and password.'});
} else {
var newUser = new User({
name: req.body.name,
password: req.body.password
});
// save the user
newUser.save(function(err) {
if (err) {
return res.json({success: false, msg: 'Username already exists.'});
}
res.json({success: true, msg: 'Successful created new user.'});
});
}
});
当我运行这段代码时,它显示错误-
throw "No callback function was given".
No Callback function was given
请帮我修复这个代码。由于
bcrypt.hash()
需要4个参数:
hash(data, salt, progress, cb)
文档对此不清楚:它指出data
, salt
和cb
是必需的,这意味着progress
不是,但没有它,你会得到错误。
如果你不关心跟踪进度,通过null
:
bcrypt.hash(user.password, salt, null, function (err, hash) { ... })
没有给出回调函数,添加null表示不返回回调!
例如:bcrypt.hash(password, salt, null, (err, hash)
我的路由器:
router.post('/create/', (req, res) => {
const email = req.body.email;
var password = req.body.password;
var salt = bcrypt.genSaltSync(10);
let errors = [];
if (errors.length > 0) {
} else {
if (email) {
pool.query('SELECT * FROM users WHERE email = ?', [email],
(err, results) => {
if (results.length > 0) {
res.status(400);
res.json({ Return: req.body.email + " Já existe no Banco de dados" })
} else {
bcrypt.hash(password, salt, null, (err, hash) => {
req.body.password = hash
pool.query('INSERT INTO users( email, password) VALUES(?, ?)', [req.body.email, hash]);
res.status(200);
res.json({ Send: results })
})
}
});
} else {
res.send('Enter Email');
};
}
});