我需要在下面的代码中发送授权标头,我用它来调用restful服务。一切正常,但标题信息没有发送。
services.factory('downloadService', ['$q', '$timeout', '$window',
function ($q, $timeout, $window) {
return {
download: function (fileName) {
var defer = $q.defer();
$timeout(function () {
$window.location.href = 'lolo/download?fileName=' + fileName;
}, 1000)
.then(function () {
defer.resolve('success');
}, function () {
defer.reject('error');
});
return defer.promise;
}
};
}
]);
我需要发送以下授权标题 -
$http.defaults.headers.common.Authorization = $localStorage.authToken;
答案 0 :(得分:0)
$window.location.href
无法传递标题,但您始终可以使用cookies
进行授权。
虽然我建议在更改服务器实现上的任何内容之前查看security problems with cookies。
答案 1 :(得分:0)
正如@ S4beR所说,你不能使用$ window.location.href传递头。 解决方法是将令牌作为查询字符串或使用cookie传递。但是,这些选项存在安全问题。 另一种方法是请求具有短寿命的临时下载令牌,例如60秒。然后将此下载令牌作为URL中的查询字符串传递。
services.factory('downloadService', ['$q', '$timeout', '$window', '$http', '$localStorage'
function ($q, $timeout, $window, $http, $localStorage) {
return {
download: function (fileName) {
var defer = $q.defer();
var req = {
method: 'POST',
url: '/download/token',
headers: {
'Authorization': $localStorage.get('token')
}
}
$http(req)
.then( function (token) {
$timeout(function () {
$window.open('lolo/download?fileName=' + fileName +"&token="+token, "_blank") = ;
}, 1000)
})
.then(function () {
defer.resolve('success');
}, function () {
defer.reject('error');
});
return defer.promise;
}
};
}
]);