Angularjs 将http侦听器限制到特定域
我正忙着在Angular.JS中构建一个小型backoffice Web客户端,它直接与我的API对话。对于身份验证,我使用OAUTH2,其中我使用http拦截器将访问令牌包含到请求中。但是,拦截器是全局的,因此不仅检查我对API的请求/响应,还检查任何其他http调用,如静态html和模板 我只想将拦截器绑定到我的API调用Angularjs 将http侦听器限制到特定域,angularjs,Angularjs,我正忙着在Angular.JS中构建一个小型backoffice Web客户端,它直接与我的API对话。对于身份验证,我使用OAUTH2,其中我使用http拦截器将访问令牌包含到请求中。但是,拦截器是全局的,因此不仅检查我对API的请求/响应,还检查任何其他http调用,如静态html和模板 我只想将拦截器绑定到我的API调用 如果拦截器中没有令人讨厌的域字符串比较if语句,这可能吗?您可以在$http周围创建一个服务包装器,负责OAuth特定的内容(例如添加头等),并将该服务(而不是$http
如果拦截器中没有令人讨厌的域字符串比较if语句,这可能吗?您可以在
$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;
});
另请参见此是的,您不必使用“讨厌的域字符串比较if语句”。只给我们一个普通的domain-string-comparing-if-statement。这意味着我知道的每个请求都必须转到API域,我必须通过检查发送到的URL中的字符串来解决它?这听起来不是很有效(在每个http调用上都是strcmp),您认为如果不是这样的话,它是如何实现的?即使有一种方法可以为域设置特定的拦截器,如果不是通过比较字符串,您希望Angular如何在内部实现它?否则它怎么知道URL是否指向特定域?您还可以设置每个请求的标题(如果您从一个地方(例如服务)发出所有特定于域的请求)。。。我知道我正在做一个API请求(来自多个服务),所以我可以在这里解决它,但这是大量的代码重复。我的问题是,这是否可以通过“范围”拦截器来解决,特别是针对那些请求。装饰http请求的助手也可能是答案。。。我只是在寻找最优雅的解决方案,因为我对Angular.JS相当陌生;)我可能会使用以下两种方法中的一种:1.)检查域并在必要时设置标头的“全局”拦截器(是的,讨厌的,字符串匹配的东西)2.)或处理这些类型的请求并为使用服务方法发出的每个请求设置标头的服务。