Аутентификация JWT работает с $http.get, но не с $http.post

Я новичок в стеке MEAN. Я использую jwt для аутентификации конечной точки API '/ API / кандидатов'

В клиентской / угловой JS службе у меня есть следующая запись

resumeFactory.get = function(candidateName) {
   return  $http.get('/api/candidates', {
      headers: {
        Authorization: 'Bearer '+ authenticationService.getToken()     
   });
};

на стороне сервера у меня есть:

app.get('/api/candidates', auth, function (req, res) {
if (!req.payload._id) {
    //user not logged in
    console.log(req);
    res.status(401).json({"message": "no  user logged in from candidates"});
}
else {
    Candidate.find({}, function (err, candidates) {
        if (err) {
            res.send(err);
        }
        res.json(candidates);
    });
}
});

Это отлично работает. то есть "auth" может извлечь токен из заголовка

Когда я изменяю все, чтобы публиковать вместо получения:

на стороне клиента

$http.post()  

на стороне сервера:

app.post()

Я получаю сообщение об ошибке от jwt следующим образом:

UnauthorizedError: No authorization token was found

Любые предложения о том, что происходит? Я могу работать с Get, но я хочу знать, почему не работает сообщение

1 ответ

Решение

С $http.post config - это третий аргумент, а не второй (как в get ) поэтому обновите ваши параметры соответственно:

$http.post('/url', { cool: postData }, {
  headers: {
    Authorization: 'Bearer '+ authenticationService.getToken()
  }    
});

Еще лучше, используйте перехватчик, чтобы добавить заголовок авторизации для всех запросов.

Другие вопросы по тегам