使用$ http.get从API(zendesk)检索不起作用

时间:2016-01-05 23:21:21

标签: javascript angularjs api curl

我正在尝试对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 

似乎运作良好。可能是显而易见的事情。

1 个答案:

答案 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)