Использование $ http.get для извлечения из API (zendesk) не работает

0

Я пытаюсь сделать 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 

Кажется, хорошо работает. Наверное, что-то очевидное.

  • 0
    Попробуйте добавить «withCredentials: true» в ваш объект конфигурации $ http. docs.angularjs.org/api/ng/service/$http#usage
  • 0
    Кроме того, я не думаю, что ваш запрос curl отправляет заголовок авторизации ... может быть, вместо этого client.user + client.token должен быть передан в теле запроса?
Показать ещё 1 комментарий
Теги:
curl

1 ответ

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)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню