Я пытаюсь сделать API-интерфейс API Zendesk, и я продолжаю получать код 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
Кажется, хорошо работает. Наверное, что-то очевидное.
Дело в том, что вам нужно правильно настроить заголовки авторизации, они должны быть закодированы в 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)