我编写了一个非常简单的sails应用程序,它只实现了护照身份验证。我使用mongoDB作为本地数据库,我无法拒绝创建具有重复电子邮件的用户。 (我已经具有唯一性:在电子邮件属性中为true)。知道我能错过什么吗?
var bcrypt = require('bcrypt');
module.exports = {
attributes: {
email: {
type: 'email',
required: true,
unique: true
},
password: {
type: 'string',
minLength: 6,
required: true
},
toJSON: function() {
var obj = this.toObject();
delete obj.password;
return obj;
}
},
beforeCreate: function(user, cb) {
bcrypt.genSalt(10, function(err, salt) {
bcrypt.hash(user.password, salt, function(err, hash) {
if (err) {
console.log(err);
cb(err);
} else {
user.password = hash;
cb();
}
});
});
}
};
我在这里创建用户:
signup: function (req, res) {
User.create(req.params.all()).exec(function (err, user) {
if (err) return res.negotiate(err);
req.login(user, function (err){
if (err) return res.negotiate(err);
return res.redirect('/welcome');
});
});
}
答案 0 :(得分:0)
添加用户时获取错误的正确方法是检查Error
方法返回的User.create()
对象(Promise或exec()
方法)。
蓝鸟承诺示例:
User.create({ email : 'foo@bar.com', password : 'secret' })
.then((newUser) => {
/* do something with newly created user `newUser` */
/* eg : return res.view('user/added.ejs', newUser); */
})
.catch((err) => {
/* do something with the Error object `err` */
/* It should tell you if email already exists */
/* eg : return res.badRequest(err.message); */
});
使用exec()
方法的示例:
User.create({ email : 'foo@bar.com', password : 'secret' })
.exec((err, newUser) => {
if (err) {
/* do something with the Error object `err` */
} else {
/* do something with newly created user `newUser` */
}
});