angularjs 和谷歌 url 缩短

angularjs and googles url shortener

我目前遇到 google url 缩短器的问题。 我已经设置了这项服务:

angular.module('widget.core').service('urlShortener', service);

function service($log, $q, $http) {

    var gapiKey = '<MyApiKey>';
    var gapiUrl = 'https://www.googleapis.com/urlshortener/v1/url';

    return {
        shorten: shorten
    };

    //////////////////////////////////////////////////

    function shorten(url) {
        console.log(url);
        var data = {
            method: 'POST',
            url: gapiUrl + '?key=' + gapiKey,
            headers: {
                'Content-Type': 'application/json',
            },
            data: {
                longUrl: url,
            }
        };

        return $http(data).then(function (response) {
            $log.debug(response);
            return response.data;
        }, function (response) {
            $log.debug(response);
            return response.data;
        });
    };
};

据我所知,这应该可行。我输入了正确的 API 键,当我使用 运行 这个方法时,我得到了这个错误:

{
    error: {
        code: 401,
        message: 'Invalid credentials'
    }
}

但是,如果我使用 postman 并完全按照这种方法进行设置:

当我post这个时,它没有任何问题。 我已经在 google 控制台上检查了我的应用程序,它肯定设置为不受限制。

有没有人遇到过这个问题?有人知道怎么解决吗?

我明白了,这与上面的代码无关,但我想我会回答我自己的问题,因为其他人可能 运行 遇到同样的问题。

在该项目中,我设置了一个 httpInterceptor,将身份验证令牌添加到与我的 API 对话的每个请求中。这就是导致问题的原因。 碰巧我已经为我的apiUrl定义了一个常量,所以我只是更新了拦截器来检查以确保请求url 在尝试附加令牌之前是我的 api。 像这样:

angular.module('widget.core').factory('authInterceptor', factory);

function factory($q, $location, $localStorage, apiUrl) {

    // The request function
    var request = function (config) {

        // If we are querying our API
        if (config.url.indexOf(apiUrl) > -1) {

            // Get our stored auth data
            var authData = angular.fromJson($localStorage.get('authorizationData'));

            // Set our headers to the request headers or a new object
            config.headers = config.headers || {};

            // If we have any auth data
            if (authData && authData.authenticated) {

                // Set our authorization header
                config.headers.Authorization = 'Bearer ' + authData.token;
            }
        }

        // Return our config
        return config;
    };

    return {
        request: request
    };
};

希望对其他人有所帮助。花了我几个小时才弄明白:/