Javascript 条件AngularJS$httpProvider拦截器?由于与访问控制允许标头冲突,Google maps拒绝了请求
我正在构建一个meanstack应用程序,对于身份验证/授权,我基本上遵循了scotch.io的meansmachine手册中的建议。因此,我使用JWT并通过http拦截器将它们附加到来自客户端的每个请求。然而,该应用程序的一个功能是谷歌地图,它可以绘制与用户相关的各种点,我正在地图控制器中运行一个函数,对列表中的城市/州值进行地理编码,并将它们放到地图上 直到昨天,当我开始在控制台中看到以下错误时,它一直工作正常:Javascript 条件AngularJS$httpProvider拦截器?由于与访问控制允许标头冲突,Google maps拒绝了请求,javascript,angularjs,google-maps,Javascript,Angularjs,Google Maps,我正在构建一个meanstack应用程序,对于身份验证/授权,我基本上遵循了scotch.io的meansmachine手册中的建议。因此,我使用JWT并通过http拦截器将它们附加到来自客户端的每个请求。然而,该应用程序的一个功能是谷歌地图,它可以绘制与用户相关的各种点,我正在地图控制器中运行一个函数,对列表中的城市/州值进行地理编码,并将它们放到地图上 直到昨天,当我开始在控制台中看到以下错误时,它一直工作正常: XMLHttpRequest cannot load https://maps
XMLHttpRequest cannot load https://maps.googleapis.com/maps/api/geocode/json?address=READING,+PA&key=<API_KEY>. Request header field Authorization is not allowed by Access-Control-Allow-Headers.
我最初使用的是书中使用的请求头x-access-token
,但得到的是相同的错误。我改为授权
,认为这可能更为普遍接受。但那没用。因此,我认为最好的方法可能是有条件地将请求头添加到任何不去maps.googleapis.com的请求中:
app.factory('AuthInterceptor', ['$q', 'AuthToken', function($q, AuthToken) {
var interceptorFactory = {};
// attach the token to every HTTP request
interceptorFactory.request = function(config) {
// have tried a couple conditional statements to avoid
// attaching the Authorization header to google maps requests:
// if (config.url.substr(8, 19) !== 'maps.googleapis.com') {
if (!_.startsWith(config.url, 'https://maps.googleapis.com') {
// grab the token
var token = AuthToken.getToken();
// if the token exists, add it to the header as Authorization
if (token) {
config.headers['Authorization'] = token;
}
}
return config;
};
...
return interceptorFactory;
}]);
但这两种条件语句都不起作用。我这样想对吗?我是否正确地假设这是错误的来源,如果请求满足某些标准,那么应该可以将授权头从请求中移除,或者这不是AngularJS拦截器的工作方式
任何建议都将不胜感激!谢谢
更新:我忽略了在if(!\u.startsWith(config.url,'https://maps.googleapis.com')< /代码>。它正在正常工作。你可以考虑使用客户端库吗?还有,你检查了你的应用程序所做的请求还是在调试器中通过你的代码来检查条件是否不起作用?(config.url,'https://maps.googleapis.com')< /代码>。现在,它正在工作。/拍打额头/谢谢你看。你可以考虑使用客户端库吗?还有,你检查了你的应用程序所做的请求还是在调试器中通过你的代码来检查条件是否不起作用?(!.startsWith(config.url,'https://maps.googleapis.com)
。好了,现在可以用了。/拍了拍额头/谢谢你看。
app.factory('AuthInterceptor', ['$q', 'AuthToken', function($q, AuthToken) {
var interceptorFactory = {};
// attach the token to every HTTP request
interceptorFactory.request = function(config) {
// have tried a couple conditional statements to avoid
// attaching the Authorization header to google maps requests:
// if (config.url.substr(8, 19) !== 'maps.googleapis.com') {
if (!_.startsWith(config.url, 'https://maps.googleapis.com') {
// grab the token
var token = AuthToken.getToken();
// if the token exists, add it to the header as Authorization
if (token) {
config.headers['Authorization'] = token;
}
}
return config;
};
...
return interceptorFactory;
}]);