我正在尝试重写一个工作的$ .ajax服务器调用以使用AngularJS $ http.put。 $ http版本返回401未授权。
我正在重写的ajax调用如下所示:
$.ajax({
url: domain + "/api/v1/user/logout/",
timeout: 10000,
type: "POST",
contentType: "application/json",
beforeSend: function(xhr) {xhr.setRequestHeader("Authorization", api_user())},
success: function(data) {
if (data.success) {
notify("Thanks for signing out");
}
}
});
我写的AngularJS等价物看起来像这样:
logoutUser: function() {
var config = {headers: {
'Authorization': api_user()
}
};
return $http.post(apiDomain + '/api/v1/user/logout/', config).then(function(response) {
return response;
});
}
当这个运行时,服务器返回一个未授权的401,并且没有输入$ http.post的'then'部分。
编辑:更多信息
使用firebug,它说请求标头是:
POST /api/v1/user/logout/ HTTP/1.1
Host: localhost:8000
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:40.0) Gecko/20100101 Firefox/40.0
Accept: application/json, text/plain, */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/json;charset=utf-8
Referer: http://localhost:8100/
Content-Length: 40
Origin: http://localhost:8100
X-Forwarded-For: 12.13.14.15
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
根据Firebug的说法,POST来源是:
{"headers":{"Authorization":"ApiKey bill:bfab6e5a1fb6e4e405756dcf14a634e86ba05c7b"}}
这是否意味着授权作为数据而不是标题发送?
答案 0 :(得分:1)
您必须添加错误功能以处理401响应。
检查以下示例代码以添加错误回调函数
// Simple GET request example:
$http({
method: 'GET',
url: '/someUrl'
}).then(function successCallback(response) {
// this callback will be called asynchronously
// when the response is available
}, function errorCallback(response) {
// called asynchronously if an error occurs
// or server returns response with an error status.
});
答案 1 :(得分:0)
根据您要访问的API /服务器端点,它们并非都授权来自前端的呼叫。 Steam社区市场(https://developer.valvesoftware.com/wiki/Steam_Web_API/Feedback)是一个例子,我发现角度前端呼叫根本没有被授权。我不得不从后端进行http调用并提供给前端。
答案 2 :(得分:0)
第二个参数是您要发送的数据。配置是第三个。
@Execute
public void execute(@Named(IServiceConstants.ACTIVE_PART) MPart activePart)
{
... handler code
}