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

标签 node.js mongodb express mongoose

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

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

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

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

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

最佳答案

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

password: { type: String, select: false }

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

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

关于node.js - 如何保护 Mongoose/MongoDB 中的密码字段,以便在填充集合时它不会在查询中返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12096262/

相关文章:

javascript - 在 node.js Web 应用程序中全局定义 PostgreSQL 数据库连接变量的最佳实践?

javascript - 当与 multer 一起用于多部分数据时,hasOwnproperty 变得未定义

express - 在使用 nodemon nameoffile.js 运行时,“nodemon”未被识别为内部或外部命令

javascript - 使用 Handlebars 渲染对象的嵌套数组

java - 吗啡 : upsert on Object embedded in an array

node.js - 在 Node.JS 中实现倒计时的建议

node.js - 扩展 Mongoose 模型而不存储所有属性

node.js - 如何在 MongoDB Node App 中启用审计和记录所有 CRUD 操作?

angularjs - Node res.render 更改 View 但不更改 url

javascript - Node 服务器的 HTTPRequest 在 IE 8 中工作,但在 IE 7 中不起作用