要从API / MongoDB检索用户集合,但要排除密码字段?

时间:2018-07-01 12:27:36

标签: node.js mongodb rest security express

我正在构建一个检索文章的api。我的数据库中也有用户,并且希望有一个返回用户的端点。 /api/users/:userid。这将返回以下内容:

{
"articles": [], //array w. references to articles the user has written
"_id": "5b1321321bcda0e3364251d7e4a", 
"email": "user@email.com",
"password": "$2a$1231241gi14k41k42bk12bh3k127iP/k1LAqwPdbgF/bXXpRia",
"__v": 0
}

-但是,我不确定在API中返回(加密的)密码是否是个好主意。我可以以某种方式排除此字段,还是建议您将电子邮件+ user_ids存储在mongodb上的单独集合中,或者通常如何处理这种情况?

2 个答案:

答案 0 :(得分:1)

您可以使用Project Fields to Return from Query从响应中排除密码字段。

db.users.find( { email: "user@email.com" }, { password: 0} )

答案 1 :(得分:0)

好的,最好不要返回用户的password。我通常要做的是使用lodash库进行类似这样的操作,例如,您可以拥有一个实用程序函数,该函数会在API返回这样的响应之前忽略密码字段

function omitPassword(user) { return _.omit(user.toObject(), ['password']); } 基本上_.omit是lodash的方法。希望这对您的需求有所帮助。