почему узел говорит мне "должен быть указан jwt", хотя токен есть? - PullRequest
0 голосов
/ 31 октября 2018

Я не могу найти вескую причину, почему я получаю эту ошибку. Я пытаюсь создать функциональность блога для создания, комментирования, создания постов в обычном приложении, используя функцию промежуточного программного обеспечения, чтобы проверить, аутентифицирован ли пользователь. Во всех активах работает нормально, но похожая функция! Когда я консоль регистрирую токен в функции промежуточного программного обеспечения, токен обычно выводится на экран, но подобный маршрут не идентифицирует его. Вот мой код:

router.post('/:id/like', checkToken, (req, res)=>{
console.log(req.token);// undefined

jwt.verify(req.token, 'natsu1piece', (err, auth)=>{
    if(err){
        console.log(err);
        res.json({err:err});
    }else { 
      User.findOne({_id:auth.id}, (err, user)=>{
        if(err){
            res.json({err:err})
        }
         Post.findById(req.params.id, (err, post)=>{
        if(err){
            res.json({err:err})
        }
        if(post._id===user._id){
            res.json({err:'you cannot like your own post'})
        }
        const like ={
            likerId: user._id,
            likerName: user.username
        }
        post.likes.push(like);
        post.save(err=>{
            if(err){
                res.json({err})
            }
            res.json({message: 'you liked that post'})
        })
    })
    })}

})

})

А вот промежуточное ПО checkAuth:

  // check authentication middleware
function checkToken(req, res, next){
const tokenBearer= req.headers.authorization;
if(typeof tokenBearer !== 'undefined'){
  const bearer = tokenBearer.split(' ');
  const token = bearer[1];
  req.token = token;
  console.log(req.token) // prints the sent token successfully

}
next();

}

У меня есть следующая функция для добавления комментария, и она отлично работает с тем же промежуточным ПО:

  router.post('/:id/delete-comment', checkToken, (req, res)=>{
   jwt.verify(req.token, 'natsu1piece', (err, auth)=>{
    if(err){
    console.log(err);
    res.json({err:err});
    return;
    }
    Post.findOneAndUpdate( {_id: req.params.id},
    {
        $pull:{
        comments:{_id:  req.body.id}
    }},
      err=>{
      if(err){
        console.log(err);
        res.json({err:err});
    }
    }

    )
   })
   })

Извините за очень длинный пост:)

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