Estou tentando adicionar um header com meu token de access a cada chamada de API. Ele funciona bem para todas as solicitações GET, mas assim que eu tento fazer um POST, o header não é adicionado.
Aqui está como eu adiciono o token:
app.factory('api', function ($http, $cookies) { return { init: function (token) { $http.defaults.headers.common['Token'] = token || $cookies.loginTokenCookie; } }; });
Que é chamado daqui:
app.run(function ($cookies, $http, $location, $rootScope,api) { $rootScope.location = $location; api.init(); });
Eu tentei fazer isso da seguinte maneira:
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; } }; });
Mas isso também não funciona. Só funciona quando altero o nome da chave do header da seguinte forma:
$http.defaults.headers.post['Token-Post'] = token || $cookies.loginTokenCookie;
Como faço para atribuir um header padrão para postagens e receber solicitações no AngularJs?
Em vez de colocar o token nos headers dentro de cada serviço (ou chamada), talvez seja melhor usar um interceptor $http
( docs aqui ).
Em seguida, você pode colocar o token em todas as solicitações. Isso funcionará se a solicitação for GET ou POST.
Amostra JS:
$httpProvider.interceptors.push(function($q, $cookies) { return { 'request': function(config) { config.headers['Token'] = $cookies.loginTokenCookie; return config; } }; });
Talvez eu esteja errado, mas porque não apenas:
app.config(['$httpProvider', function ($httpProvider) { $httpProvider.defaults.headers.post['token'] = 'your_token'; }]);
Interceptores são mais pesados e não são necessários neste caso