现在我有一个RESTful API,每当我的AngularJS服务访问我的端点时,它就会返回一个刷新的JWT授权令牌。我想让用户的浏览器通过localStorage
创建的响应对象访问它来保存此令牌(作为会话的一部分和$httpProvider.intercepters
)。我的问题是我不知道如何获得该响应对象。我知道我的浏览器会看到响应标题以及我放在那里的所有自定义值:
我尝试访问response.headers
和response.config.headers
,但两人都没有包含我的值。显然浏览器会看到它,但我如何获得这些值呢?
答案 0 :(得分:7)
来自AngularJS,$http documentation:
您可以从成功和错误回调中访问标题,如:
1)如果您提出的请求如下:
// Simple GET request example:
$http({
method: 'GET',
url: '/someUrl',
// This header will be sent as a part of the request
headers: {
'name-of-header': 'header-data'
},
}).then(function successCallback(response) {
// Access the headers like
var headerData = response.headers('name-of-header');
}, function errorCallback(response) {
// Access the headers like
var headerData = response.headers('name-of-header');
});
2)使用拦截器:
// alternatively, register the interceptor via an anonymous factory
$httpProvider.interceptors.push(function($q) {
return {
'request': function(config) {
config.headers = config.headers || {};
// Send new header
config.headers['my-header'] = 'my-header-data';
// Don't forget to return the config
return config;
},
'response': function(response) {
// Get header from response
var myHeaderData = response.headers('my-header');
// Don't forget to return response object or a promise.'
return response || $q.when(response);
}
};
});
注意:自定义标头将在同一个域中显示。但是,对于跨域请求,服务器必须发送带有标头名称的Access-Control-Expose-Headers: foo-bar-header, ...
标头以作为值公开,这将使$http
模块可以看到自定义标头。详细了解CORS。另请参阅Access-Control-Expose-Headers和security considerations。
答案 1 :(得分:0)
这很简单..它可以通过使用以下方法实现。
function SuccessCB(response){
// securityID is response header param name.
var resheader = response.header['securityID'];
}