1

如果所有服务器都响应 OPTIONS 请求,这不会有问题,但 Satellizer 甚至会导致 Angular 使用 Content-Type text/plain 预先发送 GET 请求。实际上,它破坏了我的其他 REST 查询的一半。

4

2 回答 2

1

在查看了代码并研究了 Angualr 的 httpProvider 之后,我意识到 Sateliizer 正在使用 httpProvider 的拦截器数组拦截每个请求并添加以下内容:

var token = localStorage.getItem(tokenName);
if (token && config.httpInterceptor) {
  token = config.authHeader === 'Authorization' ? 'Bearer ' + token : token;
  httpConfig.headers[config.authHeader] = token;
}

这样每个请求都会获得一个 Authorization 标头。由于我实际上只有一个需要授权标头的请求,因此我修改了条件语句:

if (token && config.httpInterceptor && httpConfig.auth===true) {

然后在我的 $http.get 中为实际需要授权的单一服务添加:

        var config = {auth: true};
        $http.get(googleUrl, config)           
于 2015-03-10T19:08:15.363 回答
1

我使用satellizer库来管理授权。由于我还对第三方 API 进行 REST 调用,因此我不想包含Authorization标头。添加skipAuthorization:true配置块解决了我的问题。例如:

(function () {
  'use strict';
  angular.module('weather')
    .factory('weatherResource', ['$http', function ($http) {
      return $http({
        method: 'GET',
        url: 'http://api.openweathermap.org/data/2.5/weather?q=Bangalore&appid=a50e83454ba54b9',
        skipAuthorization: true
      });
    }]);
})();

祝你好运。

于 2015-10-18T06:40:24.213 回答