JWT身份验证使用$ http.get但不使用$ http.post

时间:2016-07-08 20:11:20

标签: angularjs node.js jwt mean express-jwt

我是MEAN堆栈的新手。 我正在使用jwt来验证api端点 '/ api / candidate'

在客户端/角度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

有关正在发生的事情的任何建议?我可以使用获取,但我想知道为什么发布不起作用

1 个答案:

答案 0 :(得分:1)

使用$http.post配置是third argument,而不是第二(like in get),因此请相应地更新您的参数:

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

更好的是,use an interceptor将Authorization标头添加到所有请求中。