问:如何避免使用Sails存储重复的用户?

时间:2017-12-14 16:40:49

标签: mongodb sails.js

我编写了一个非常简单的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');
    });
  });
}

1 个答案:

答案 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` */
  }
});