2015-11-08 51 views
3

我對SPA MEAN應用程序的工作後,我開發它反對蜂房模擬的API,它具有以下CORS標頭設置:問題與CORS加入Stormpath角SDK

Access-Control-Allow-Methods → OPTIONS,GET,HEAD,POST,PUT,DELETE,TRACE,CONNECT 
Access-Control-Allow-Origin → * 
Access-Control-Max-Age → 10 

這一切工作正常和角度可以使用$ http angular service訪問它就好了。但是經過加入Stormpath角SDK所有這些請求失敗,以下錯誤:

XMLHttpRequest cannot load https://xxx.apiary-mock.com/workshops?type=favourite. Credentials flag is 'true', but the 'Access-Control-Allow-Credentials' header is ''. It must be 'true' to allow credentials. Origin 'http://localhost:8000' is therefore not allowed access. 

我試圖去弄清楚爲什麼這些請求被拒絕,在什麼時候,這些標題被加入?

回答

2

謝謝你發現這個問題。 Stormpath Angular SDK確實有一個攔截器,它爲所有請求設置withCredentials: true標誌。請參閱代碼here

我們的目的是確保始終發送我們的身份驗證Cookie,即使在跨域情況下也是如此。但是,如果您的Angular應用程序正在與其他不需要cookie發送的API進行交談,那麼我可以看到這會有什麼問題。

作爲一種變通方法,您可以通過簡單地增加一個又一個超越我們的攔截器:

angular.module('myapp', [ 
    'stormpath', 
    'stormpath.templates' 
]).config(function ($httpProvider) { 
    $httpProvider.interceptors.push(function() { 
    return { 
     request: function(config) { 
     config.withCredentials=false; 
     return config; 
     } 
    }; 
    }); 
}); 

我創建了一個問題,討論一個更好的解決方案:https://github.com/stormpath/stormpath-sdk-angularjs/issues/72

+0

太棒了,那就是我想要的!也感謝提出一個問題,希望將來這將是一個可配置的事情。 – Vitalij

0

我如何解決它這些頭添加到養蜂場:

+ Response 200 (application/json) 

    + Headers 

      Access-Control-Allow-Credentials: true 
      Access-Control-Allow-Methods: OPTIONS,GET,HEAD,POST,PUT,DELETE,TRACE,CONNECT 
      Access-Control-Allow-Origin: http://localhost:8000 

我仍然在試圖找出哪裏Stormpath做雖然需要這些頭。

2

任何時候你有一個SPA客戶端從一個域(例如localhost:8080)服務,並且希望該客戶端上的另一個域(xxx.apiary-mock.com)訪問API,瀏覽器需要服務器域正確添加CORS頭。

如果客戶端和服務器的域是不同的,瀏覽器的安全模型要求服務器以指示哪些客戶端結構域可以由Access-Control-Allow-Origin響應報頭中設置(除了其他相關Access-Control-*頭)訪問服務器。

+0

我明白,是什麼我不知道在Stormpath客戶端框架中,它需要「訪問控制 - 允許 - 憑據」頭,並且可以禁用此檢查。 – Vitalij

+0

@Vitalij啊,很好的說明 - 謝謝!我會ping我們的JS SDK團隊,並要求他們在這裏協助。 –