12

我试图将带有访问令牌的标头添加到每个 API 调用。它适用于所有 GET 请求,但是一旦我尝试进行 POST,就不会添加标头。

这是我添加令牌的方法:

app.factory('api', function ($http, $cookies) {
return {
    init: function (token) {
        $http.defaults.headers.common['Token'] = token || $cookies.loginTokenCookie;
    }
  };
});

从这里调用:

app.run(function ($cookies, $http, $location, $rootScope,api) {
    $rootScope.location = $location;
    api.init();
});

我试过这样做:

app.factory('api', function ($http, $cookies) {
return {
    init: function (token) {
        $http.defaults.headers.common['Token'] = token || $cookies.loginTokenCookie;
        $http.defaults.headers.post['Token'] = token || $cookies.loginTokenCookie;

    }
};
});

但这也行不通。它仅在我更改标题键名称时有效,如下所示:

 $http.defaults.headers.post['Token-Post'] = token || $cookies.loginTokenCookie;

如何为帖子分配默认标头并在 AngularJs 中获取请求?

4

2 回答 2

21

与其将令牌放在每个服务(或调用)内的标头上,不如使用$http拦截器(此处的文档)。

然后,您可以在每个请求上放置令牌。无论请求是 GET 还是 POST,这都会起作用。

JS 示例:

$httpProvider.interceptors.push(function($q, $cookies) {
    return {
     'request': function(config) {

          config.headers['Token'] = $cookies.loginTokenCookie;
          return config;
      }
    };
  });
于 2014-04-23T13:31:44.177 回答
5

也许我错了,但为什么不只是:

app.config(['$httpProvider', function ($httpProvider) {
    $httpProvider.defaults.headers.post['token'] = 'your_token';
}]);

拦截器更重,在这种情况下不需要

于 2015-11-19T19:44:18.893 回答