我正在尝试检查用户是否是管理员,但无法检索该值。当我登录console.log(user)时,我得到了所有这些值:
email: 'testone@hotmail.com',
password:'$2b$10$mMyZkF3y8wxFTXUNgd/giuDvbaXfTFxlYECQmHgvAHDd4NB5CNpsq',
role: 'admin'
现在如何检查用户角色是否===成为“管理员”?
我尝试做user.role
,req.userData.role === 'admin'
,但似乎找不到它,因为它告诉我未定义。
router.delete("/:id",
authCheck,
(req, res, next) => {
User.find()
.then(user => {
console.log('*this log gives me undefined*', user.role);
if (!req.userData.role === 'admin') {
Post.deleteOne({
_id: req.params.id,
poster: req.userData.userId,
}).then(result => {
if (result.n > 0) {
res.status(200).json({
message: "Deletion successful!"
});
} else {
res.status(401).json({
message: "Not authorised!"
});
}
})
}
})
});
我知道你们中的大多数人都会发现这个超级简单,但是我只是后端的新手,所以我选择将其发布为修复它的最后希望,非常感谢!
答案 0 :(得分:1)
我认为User.find()
在给您一系列文档,而不是文档的对象。
尝试user[0].role
!req.userData.role === 'admin'
也是一个问题。
它应该是req.userData.role !== 'admin'
或!(req.userData.role === 'admin')
此外,您的应用似乎已经在从数据库加载用户并将其附加到req
。 passport.js
或其他方式必须这样做。在这种情况下,您实际上不需要再次执行User.find()
,因为它已经由auth机制完成。这仅与请求者有关,如果您要为其他用户加载其他内容,请忽略此骚扰。
此外,如果您只想查找一条与查询匹配的记录,请尝试使用findOne
而不是find