Question

Im trying to add a header with my access token to each API call. It works well for all the GET requests, but as soon as I try to make a POST the header isn't added.

Here is how I add the token:

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

Which gets called from here:

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

I have tried doing it like the following:

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;

    }
};
});

But this also doesnt work. It only works when I change the header key name like the following:

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

How do I assign a default header to posts and get requests in AngularJs?

Was it helpful?

Solution

Instead of placing the token on the headers inside each service (or call), it might be better to use an $http interceptor (docs here).

Then, you can place the token on every request. This will work whether the request is a GET or POST.

JS sample:

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

          config.headers['Token'] = $cookies.loginTokenCookie;
          return config;
      }
    };
  });

OTHER TIPS

Maybe I'm wrong but why not just:

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

Interceptors are heavier and not needed in this case

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top