我正在尝试对Zendesk's API进行API调用,并且我一直在获取401 auth代码,即使我在终端中执行cURL时也能正常工作。我怎样才能在Angular中完成这项工作?
function dataservice($http) {
var service = {
getMacros: getMacros
};
return service;
/////////////////////
function getMacros() {
var client = {
username: window.btoa('myEmail'),
token: window.btoa('/token:myToken'),
remoteUri: 'https://myCompany.zendesk.com/api/v2/macros.json'
};
console.log('Loading...');
return $http({
method: 'GET',
url: client.remoteUri,
headers: {
'Authorization': client.username + client.token
}
})
.then(getMacrosComplete)
.catch(function (message) {
exception.catcher('Failed to getMacros')(message);
});
function getMacrosComplete(response) {
console.log('Done');
var data = response.data;
return data;
};
};
上面的代码总是会返回401,但这有效:
curl myEmail/token:myToken https://myCompany.zendesk.com/api/v2/macros.json
似乎运作良好。可能是显而易见的事情。
答案 0 :(得分:1)
问题是您需要正确设置授权标头,它们应该是Base64编码的,您必须声明“基本”身份验证(这是大多数人想念的主要部分)。
所以这应该有效:
function dataservice($http) {
var service = {
getMacros: getMacros
};
return service;
/////////////////////
function getMacros() {
var client = {
username: 'myEmail',
token: 'myToken',
remoteUri: 'https://myCompany.zendesk.com/api/v2/macros.json'
};
console.log('Loading...');
return $http({
method: 'GET',
url: client.remoteUri,
headers: {
'Authorization': 'Basic ' + window.btoa(client.username + '/token:' + client.token)
}
})
.then(getMacrosComplete)
.catch(function (message) {
exception.catcher('Failed to getMacros')(message);
});
function getMacrosComplete(response) {
console.log('Done');
var data = response.data;
return data;
};
};
当然,您必须在Zendesk帐户中启用令牌身份验证,否则您可以通过设置密码并通过用户+密码进行身份验证并执行以下操作:
'Authorization': 'Basic ' + window.btoa(client.username + ':' + client.password)