Сравнение экспресс-пользователя с внешним ключом Mongoose - PullRequest
0 голосов
/ 16 сентября 2018

моя модель мангуста содержит внешний ключ для модели User.Если поступает запрос на размещение, публикацию или удаление, я хотел бы проверить, совпадает ли первичный идентификатор текущего пользователя, прошедшего проверку, с внешним ключом.

Если я регистрирую идентификаторы, они точно совпадают,но код кажется другим.Может кто-нибудь сказать мне правильный путь по этому поводу?Заранее спасибо.

Модель

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...
  });
});

1 Ответ

0 голосов
/ 16 сентября 2018

В модели вы сохраняете пользователя как ObjectId, и всякий раз, когда вы сопоставляете его с пользователем в,

if (req.user._id !== model.user)

, оно всегда возвращает true, потому что req.user._id aтип строки и model.user имеет тип ObjectId.Это похоже на

if ("5b9b69933fc1de058a4086ed" !== ObjectId("5b9b69933fc1de058a4086ed")

Вы можете сравнить их, преобразовав идентификатор пользователя в тип ObjectId.

import mongoose from 'mongoose';

if (!new mongoose.Types.ObjectId(user._id).equals(model.user))
...