angularjs - Why won't $http set a default header? -
$http.post('http://localhost:7001/v1/sessions', { data: { username: $scope.user.username, password: $scope.user.password, type: 'sessions' } }) .then(function(response) { if(response.data.data.token) { $http.defaults.headers.common.authorization = response.data.data.token; $state.go('app.dashboard'); } else { $scope.autherror = response; } }, function(x) { $scope.autherror = 'server error'; });
i can confirm if
condition gets called , response.data.data.token
present.
it goes app.dashboard
state intercepted ui-router
:
$stateprovider.state('app', { abstract: true, url: '/app', templateurl: 'tpl/app.html', resolve: { current_user: ['$http', function($http) { return $http.get('http://localhost:7001/v1/users/4/entities'); }] } })
that call, however, not have set in header. thought $http.defaults
set default value in header. doing incorrectly?
you must set default headers in config
method , not in service
.
example:
myapp.config(['$httpprovider', function ($httpprovider) { $httpprovider.defaults.headers.common['content-type'] = 'application/json; charset=utf-8'; }]);
only in config
can configure httpprovider
. if try inside service, won't affect $httpprovider
service @ all.
edit:
you must make use interceptors in scenario.
for purposes of global error handling, authentication, or kind of synchronous or asynchronous pre-processing of request or postprocessing of responses, desirable able intercept requests before handed server , responses before handed on application code initiated these requests.
refer angular docs interceptor section
just sample code:
app.service('apiinterceptor', function($rootscope, userservice) { var service = this; service.request = function(config) { // check if token available. once token available here userservice. var access_token = userservice.gettoken() || "unauthorized"; if (access_token) { config.headers.authorization = access_token; } return config; }; service.responseerror = function(response) { return response; }; })
in config
$httpprovider.interceptors.push('apiinterceptor');
Comments
Post a Comment