Невозможно войти после создания поста - PullRequest
0 голосов
/ 23 марта 2020

Итак, я целый день чесал голову об этой проблеме. Мое приложение поддерживает регистрацию, вход, создание поста. Что я заметил, так это то, что пользователь, у которого нет сообщения, может в любое время успешно войти в систему. Но те, у кого есть сообщения, не могут войти после.

Вот как это выглядит.

case 1
I register with Jim -> jim is stored in the db -> login with jim(success) -> logout(works fine) and again login(works fine)

case 2
I register with Jim -> jim is stored in the db -> login with jim(success) -> makes a post -> post shows in his feed(success) -> logout(works fine) and again try to login(failed)

Ошибка -> POST http://localhost:3000/api/v1/users/login 402 (Payment Required) Это даже не входит в контроллер входа, когда пользователь, у которого есть сообщение (ы) попробуйте войти. Он успешно работает для пользователя, у которого нет сообщений. Это меня смущает.

Вот код:

    registerUser: (req, res) => {
        console.log("inside register user")
        const { username, email, password } = req.body
        User.create(req.body, (err, createdUser) => {
            if (err) {
                return res.status(500).json({ error: "Server error occurred" })
            } else if (!username || !email || !password) {
                return res.status(400).json({ message: "Username, email and password are must" })
            } else if (!validator.isEmail(email)) {
                return res.status(400).json({ message: "Invaid email" })
            } else if (password.length < 6) {
                return res.status(400).json({ message: "Password should be of at least 6 characters" })
            }
            else {
                return res.status(200).json({ user: createdUser })
            }
        })
    },

    loginUser: async (req, res, next) => {
        console.log("inside login controller")
        const { email, password } = req.body

        if (!email || !password) {
            return res.status(400).json({ message: "Email and password are must" })
        }

        await User.findOne({ email }, (err, user) => {
            if (err) {
                return next(err)
            } else if (!validator.isEmail(email)) { 
                return res.status(400).json({ message: "Invalid email" })
            } else if (!user) {
                return res.status(402).json({ error: "User not found" })
            } else if (!user.confirmPassword(password)) {
                return res.status(402).json({ error: "incorrect password" })
            } 

            // generate token here
            const token = auth.signToken({ userId: user._id })
            // const token = auth.signToken({ email })

            res.status(200).json({ user, token })
            // next()
        })
    }

newPost controller


newPost: (req, res) => {

    const data = {
      title: req.body.title,
      content: req.body.content,
      user: req.user.userId
    }

    Post.create(data, (err, newPost) => {
      if (err) {
        return res.status(500).json({ error: err })
      } else if (!newPost) {
        return res.status(400).json({ message: "No Post found" })
      } else if (newPost) {
        User.findById(req.user.userId, (err, user) => {
          user.posts.push(newPost._id) //pushing posts documnet objectid to the post array of the user document
          user
            .save()
            .then(() => {
              return res.json(200).json({ user })
            })
            .catch(err => {
              return res.status(500).json({ error: err })
            })
        })
      }
    })
  }

Я также зарегистрировался в почтальоне, пройдя по маршруту /users/login и введя адрес электронной почты и пароль, но там написано incorrect password. Он возвращает возврат от

else if (!user.confirmPassword(password)) {
       return res.status(402).json({ error: "incorrect password" })
 }

Если я изменю вышеприведенное значение на ({ error: err}), он возвращает ответ:

{
    "error": null
}

Update

       User.findById(req.user.userId, (err, user) => {
          console.log("user before save", user)
          user.gratitudes.push(newGratitude._id) //pushing posts documnet objectid to the post array of the user document
          user
            .save()
            .then(() => {
              // return res.json(200).json({ user })
              console.log("user after saving", user)
            })
            .catch(err => {
              return res.status(500).json({ error: err })
            })
        )

Итак, я сделал это и утешил

user before saving => { posts: [],
  _id: 5e78c76381327761329b8dc6,
  username: 'king123',
  email: 'king123@gmail.com',
  password: '$2b$10$CnWib5AMxw1qv5RnBdEisOXUq9X3lqqOMH3HWO3DlWf.iB2Ke8GLS',
  createdAt: 2020-03-23T14:27:47.820Z,
  updatedAt: 2020-03-23T14:27:47.820Z,
  __v: 0 }


user after saving =>  { posts: [ 5e78c77a81327761329b8dc7 ],
  _id: 5e78c76381327761329b8dc6,
  username: 'king123',
  email: 'king123@gmail.com',
  password: '$2b$10$ro4FIO40.3Nwe52RFq/leepH906HvIHYW5A3XrTGfNXcUSIfsx0Bq',
  createdAt: 2020-03-23T14:27:47.820Z,
  updatedAt: 2020-03-23T14:28:10.290Z,
  __v: 1 }

Похоже, хешированный пароль изменился.

1 Ответ

0 голосов
/ 23 марта 2020

Похоже, ваш метод публикации в блоге как-то влияет на вашу запись пользователя.

Попробуйте создать нового пользователя, войдите в систему, проверьте, что запись пользователя выглядит нормально.

Затем создайте сообщение как этот пользователь и, вместо того, чтобы проверять его, проверьте запись на наличие различий, прежде чем Вы сделали пост. Я ожидаю, что что-то из пост-обновления по ошибке меняет что-то в записи пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...