Я не могу найти вескую причину, почему я получаю эту ошибку. Я пытаюсь создать функциональность блога для создания, комментирования, создания постов в обычном приложении, используя функцию промежуточного программного обеспечения, чтобы проверить, аутентифицирован ли пользователь. Во всех активах работает нормально, но похожая функция! Когда я консоль регистрирую токен в функции промежуточного программного обеспечения, токен обычно выводится на экран, но подобный маршрут не идентифицирует его. Вот мой код:
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});
}
}
)
})
})
Извините за очень длинный пост:)