将http拦截器限制为特定域

时间:2014-05-31 08:43:57

标签: angularjs

我正忙着在Angular.JS中构建一个小后台Web客户端,它直接与我的API对话。对于身份验证,我使用OAUTH2,我使用http拦截器将访问令牌包含在请求中。但是,拦截器是全局的,因此不仅检查我对API的请求/响应,还检查任何其他http调用,如静态html和模板。

我想将拦截器绑定到我的API调用。

如果拦截器中没有令人讨厌的domain-string-comparison-if-statement,这是可能的吗?

1 个答案:

答案 0 :(得分:7)

您可以围绕$http创建一个服务包装器来处理OAuth特定的内容(例如添加标头等),并使用该服务(而不是$http)来处理与OAuth相关的请求。


示例实施:

app.factory('HttpOAuth', function ($http) {
    // Augments the request configuration object 
    // with OAuth specific stuff (e.g. some header)
    function getAugmentedConfig(cfg) {
        var config  = cfg || {};
        config.headers = config.headers || {};
        config.headers.someHeaderName = 'some-header-value';
        return config;
    }

    // The service object to be returned (`$http` wrapper)
    var serviceObj = {};

    // Create wrappers for methods WITHOUT data
    ['delete', 'get', 'head', 'jsonp'].forEach(function (method) {
        serviceObj[method] = function (url, config) {
            var config = getAugmentedConfig(config);
            return $http[method](url, config);
        };
    });

    // Create wrappers for methods WITH data
    ['post', 'put'].forEach(function (method) {
        serviceObj[method] = function (url, data, config) {
            var config = getAugmentedConfig(config);
            return $http[method](url, data, config);
        };
    });

    // Return the service object
    return serviceObj;
});

另请参阅此 short demo