为什么节点告诉我“必须提供jwt”(尽管令牌存在)?

时间:2018-10-30 23:32:43

标签: mean-stack express-jwt

我还无法找到我收到该错误的正当理由。我正在尝试自己构建博客功能,以便使用中间件功能检查用户是否已通过身份验证,从而在平均应用中创建,评论,喜欢帖子。在所有活动中,它都可以正常工作,但具有类似功能!当我在中间件功能中通过控制台登录令牌时,令牌通常会显示在屏幕上,但类似路线无法识别它。这是我的代码:

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

    )
   })
   })

很抱歉,很长的帖子:)

0 个答案:

没有答案