我的猫鼬模型包含模型User的外键。 如果出现放置,发布或删除请求,我想检查当前已认证用户的主ID是否与外键相同。
如果我登录ID,它们是完全相同的,但是代码似乎有所不同。有人可以告诉我正确的方法吗?预先感谢。
模型
mongoose.model(
'MyModel',
mongoose.Schema({
user: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User',
required: true
},
...
})
)
快速路线
router.put('/models/:id', auth, (req, res, next) => {
MyModel.findById(req.params.id, (err, model) => {
if (err) return res.status(500).send({success: false, msg: 'Model not found'});
if (req.user._id !== model.user) return res.status(500).send({sucess: false, msg: 'You did not create this model'});
...success...
});
});
答案 0 :(得分:1)
在模型中,您将用户存储为ObjectId
,并在与用户匹配时将其存储,
if (req.user._id !== model.user)
它总是返回true,因为req.user._id
是字符串类型,而model.user
是ObjectId
类型。就像
if ("5b9b69933fc1de058a4086ed" !== ObjectId("5b9b69933fc1de058a4086ed")
您可以通过将用户ID转换为ObjectId
类型来进行比较。
import mongoose from 'mongoose';
if (!new mongoose.Types.ObjectId(user._id).equals(model.user))