我正忙着在Angular.JS中构建一个小后台Web客户端,它直接与我的API对话。对于身份验证,我使用OAUTH2,我使用http拦截器将访问令牌包含在请求中。但是,拦截器是全局的,因此不仅检查我对API的请求/响应,还检查任何其他http调用,如静态html和模板。
我想将拦截器绑定到我的API调用。
如果拦截器中没有令人讨厌的domain-string-comparison-if-statement,这是可能的吗?
答案 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 。