保存Mongo文档

格雷格

在一个普通的堆栈应用程序中,我在用户架构中创建一个新用户,然后在文档架构中创建一个新文档

    var UserSchema = new Schema({
            username: String,
            password: String,
            docs: [{
                type: mongoose.Schema.Types.ObjectId,
                ref: 'Doc'
            }],
        )
    }

    var DocSchema = new Schema({…)
    }

    UserSchema.pre('save', function(next) {
        if (this.password) {
            this.salt = new Buffer(crypto.randomBytes(16).toString('base64'), 'base64');
            this.password = this.hashPassword(this.password);
        }
        next();
    });

以下代码部分是护照注册,最后我遇到了newUser.save()问题;使用push方法后,如果我不保存用户,则doc ID不会显示在用户文档中。但是保存用户似乎也更改了哈希密码。如果我评论newUser.save(); 登录正常,否则我输入了错误的密码

    passport.use('local-signup', new LocalStrategy({
              usernameField: 'username',
              passwordField: 'password',
              passReqToCallback: true
      },
      function(req, username, password, done) {

          process.nextTick(function() {

                  User.findOne({
                          username: username
                      }, function(err, user) {
                          // if there are any errors, return the error
                          if (err)
                              return done(err);
                          if (user) {
                              return done(null, false, req.flash('signupMessage', 'Username is already taken.'));
                          } else {
                              var newUser = new User();
                              newUser.username = username;
                              newUser.password = password;
                              newUser.email = req.body.email;
                              newUser.save(function(err) {
                                  if (err)
                                      throw err;
                                  var doc = new Doc({
                                      user: newUser.username,
                                      docTitle: newUser.username
                                  });
                                  doc.save(function(err) { // create doc
                                      if (err) {
                                          return next(err);
                                      } else {
                                          newUser.docs.push(doc); // push doc'id in docs field in user
                                          newUser.save(); // save user after doc'id has been push
                                      };
                                      return done(null, newUser);
                                  });
                              });

任何帮助,将不胜感激

沙布雷哈根

猫鼬预保存中间件中的逻辑说:“如果要保存的文档上有密码,则生成一个salt并对该密码进行哈希处理”。因此,如果在已经加密和哈希处理的文档上存在密码,则在中间件运行时,它将再次加密并哈希该预先存在的密码。这就是为什么您无法第二次登录;每次保存文档时,密码都会更改。

我猜您希望猫鼬预保存中间件仅在您第一次保存文档时运行。每次保存文档时,都会运行预保存中间件。this.isNew可以使用预保存中间件中的文档上的一个属性。这样可以确保仅在首次保存文档时才生成密码。

UserSchema.pre('save',  function(next) {
    if (this.password && this.isNew) {
        this.salt = new Buffer(crypto.randomBytes(16).toString('base64'), 'base64');
        this.password = this.hashPassword(this.password);
    }
    next();
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么我的Mongo文档无法通过Mongoose正确保存?

来自分类Dev

带有参考的Mongo架构:文档未使用保存进行更新

来自分类Dev

在节点中插入新的mongo文档时,保存不带ObjecID部分的_id

来自分类Dev

Sailsjs-防止非模型文件保存在mongo文档中

来自分类Dev

Mongo子文档人口

来自分类Dev

Mongo DB,计数文档

来自分类Dev

Mongo子文档人口

来自分类Dev

Mongo文档到数组

来自分类Dev

使用一个 Mongo 文档来保存数千个对象,还是使用数千个文档每个保存一个对象?

来自分类Dev

猫鼬(mongo),复制文档

来自分类Dev

用Pymongo更新Mongo文档

来自分类Dev

汇总Mongo子文档的字段

来自分类Dev

汇总Mongo子文档数组

来自分类Dev

Spring Mongo Upsert嵌套文档

来自分类Dev

Mongo Aggregation分组子文档

来自分类Dev

无法获取单个mongo文档

来自分类Dev

展开包含的Mongo文档

来自分类Dev

从mongo数组删除嵌套文档

来自分类Dev

使用PHP解析Mongo文档

来自分类Dev

Mongo / Morphia查询整个文档

来自分类Dev

在mongo中查找子文档

来自分类Dev

返回唯一的 mongo 文档

来自分类Dev

根据时间更新mongo文档

来自分类Dev

节点 Mongo - 找不到文档

来自分类Dev

合并 Mongo 文档中的字段

来自分类Dev

Mongo 搜索嵌套文档数组

来自分类Dev

MongoDB保存子文档

来自分类Dev

AppleScript保存预览文档

来自分类Dev

文档的复制/保存冲突