从返回的mongoose文档实例中删除属性。 MongoDB的

时间:2017-04-22 16:19:42

标签: javascript mongodb mongoose

在这种情况下,我创建了一个依赖于用户文档的jwt令牌,但问题是出于安全考虑,我不想在user对象中包含密码字段被传递到我的encode函数。

router.post('/admin/login', (req, res, next)=>{
  passport.authenticate('local-login', (err, user, info)=> {
    if (err) {
      return next(err);
    }else if (!user) {
      return res.json(info)

    }else {
      user.toObject();
      delete user.password;
      console.log(`User is ${user}`);
      let token = encode(user, 'inav');
      return res.send(token)
    }

  })(req, res, next);
})

我试过这个,但这不起作用。 user仍包含密码

1 个答案:

答案 0 :(得分:1)

如果https://github.com/jaredhanson/passport-local是您正在使用的护照策略,它将返回一个猫鼬模型。您必须将其转换为普通对象才能删除密码属性。 toObject返回一个必须存储在变量中的对象。

const userObj = user.toObject();
delete userObj.password;
console.log(`User is ${userObj}`);
const token = encode(userObj, 'inav');

http://mongoosejs.com/docs/api.html#document_Document-toObject