如何保护 Mongoose/MongoDB 中的密码字段,以便在填充集合时它不会在查询中返回?

新手上路,请多包涵

假设我有两个集合/模式。一个是带有用户名和密码字段的用户架构,然后,我有一个博客架构,它在作者字段中引用了用户架构。如果我使用猫鼬做类似的事情

Blogs.findOne({...}).populate("user").exec()

我也会填充博客文档和用户,但是如何防止 Mongoose/MongoDB 返回密码字段?密码字段经过哈希处理,但不应返回。

我知道我可以省略密码字段并在一个简单的查询中返回其余字段,但是我如何使用填充来做到这一点。另外,有什么优雅的方法可以做到这一点吗?

此外,在某些情况下,我确实需要获取密码字段,例如当用户想要登录或更改密码时。

原文由 Luis Elizondo 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 885
2 个回答
.populate('user' , '-password')

http://mongoosejs.com/docs/populate.html

JohnnyHKs 使用模式选项回答可能是这里的方法。

另请注意, query.exclude() 仅存在于 2.x 分支中。

原文由 aaronheckmann 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以使用字段的 select 属性在架构定义级别更改默认行为:

 password: { type: String, select: false }

然后,您可以根据需要将其拉入 findpopulate 通过字段选择调用 '+password' 调用。例如:

 Users.findOne({_id: id}).select('+password').exec(...);

原文由 JohnnyHK 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题