我有一个工作正常的拦截器,并为我的所有请求添加了身份验证标头。
全部?嗯,我是这么认为的。但是现在我在我的应用程序中添加了文件上传功能,在上传文件时我无法看到拦截器。
发送文件上传请求,服务器响应401访问被拒绝。
这是我的拦截器:
utilsModule.factory('AuthInterceptor',
['$q', 'AuthService', 'CacheCredentialsService',
function($q, AuthService, CacheCredentialsService) {
return {
'request': function(config) {
console.log("Intercepting request", config);
if (config.url.indexOf("admins/login") == -1) {
console.log("Adding authentication headers");
config.headers.Authorization = AuthService.getCredentialsHeaders(CacheCredentialsService.getLoggedInAdminEmail(), CacheCredentialsService.getLoggedInAdminPassword());
} else {
config.headers.Authorization = '';
}
return config;
},
'requestError': function(rejection) {
return $q.reject(rejection);
},
'response': function(response) {
return response;
},
'responseError': function(rejection) {
if (rejection.status == 401) {
CacheCredentialsService.destroyLoggedInAdmin();
}
return $q.reject(rejection);
}
}
}
]);
上传请求中没有显示任何控制台日志语句(它们都在所有其他请求中)。
浏览器控制台日志中显示的所有上传请求标头:
POST /nitro-project-rest/bts/upload HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Content-Length: 299
Origin: http://localhost:9000
User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/34.0.1847.116 Chrome/34.0.1847.116 Safari/537.36
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryf1GHBVkgYB1HbK2I
Accept: */*
Referer: http://localhost:9000/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8,fr;q=0.6,es;q=0.4,et;q=0.2,nb;q=0.2,ru;q=0.2,sv;q=0.2,it;q=0.2,de;q=0.2
上传请求有效负载:
------WebKitFormBoundaryf1GHBVkgYB1HbK2I
Content-Disposition: form-data; name="file"; filename="europlasma.txt"
Content-Type: text/plain
答案 0 :(得分:2)
由于Angular-File Upload不使用Angular $http
服务,因此您唯一的选择就是使用 FileUploader
服务中的属性。
var uploader = new FileUploader({
headers: {
Authorization: 'Bearer Your-token'
},
formData: {
extraData: 'This is an extra data'
}
});
uploader.onErrorItem = function(item, response, status, headers) {
if(status === 401) {
// do your thing
}
};