Невозможно заполнить автора в блоге MERN с помощью JWT - PullRequest
0 голосов
/ 02 февраля 2020

Я пытаюсь создать сайт блога с использованием стека MERN и JWT для аутентификации.

Моя модель пользователя выглядит следующим образом:

const mongoose = require("mongoose");
const { Schema } = mongoose;

const UserSchema = Schema({
  name: String,
  username: String,
  password: String,
  posts: [{ type: Schema.Types.ObjectId, ref: "Blog" }]
});

module.exports = mongoose.model("User", UserSchema);

Модель моего блога выглядит следующим образом:

const mongoose = require("mongoose");
const { Schema } = mongoose;

const BlogSchema = Schema({
  title: String,
  content: String,
  date: { type: Date, default: Date.now },
  author: { type: Schema.Types.ObjectId, ref: "Blog" }
});

module.exports = mongoose.model("Blog", BlogSchema);

Я использую JWT для аутентификации Создать новый блог Маршрут . При входе в систему я отправляю клиенту токен JWT с идентификатором и именем текущего пользователя в качестве полезной нагрузки. Если токен, отправленный из переднего конца реагирования, действителен, тогда я добавляю идентификатор пользователя в объект req при проверке JWT. Ie. у объекта req будет поле user_id вместе с заголовками, телом и другими

Создание нового почтового маршрута выглядит так:

blog.post("/", authenticateUsingJwt, (req, res) => {
  // Validating the req.body object
  const newPost = new Blog({
    title: req.body.title,
    content: req.body.content,
    author: req.user_id
  });

  newPost.save();
});

Когда я использую свой Оболочка mongodb, и, глядя на мою коллекцию User, я вижу posts [] как пустой массив. Как это исправить, чтобы я мог использовать заполнение?

User.findOne({ username: "existingUserInDatabase" })
  .populate("Blog")
  .then(user => res.send(user))
  .catch(err => console.log(err));

Этот код возвращает пользователя из БД, но posts [] - это пустой массив.

1 Ответ

0 голосов
/ 02 февраля 2020

Вам нужно заполнить блоги, а не блоги.

User.findOne({ username: "existingUserInDatabase" })
  .populate("blogs")  //not "Blog"
  .then(user => res.send(user))
  .catch(err => console.log(err));
...