2016-05-17 144 views
5

有一個節點服務器在接受用戶的正確憑證時,護照js根據set-cookie的名稱在請求頭中創建和發送會話cookie。CORS - 服務器端cookie沒有在chrome瀏覽器上保存

但是,當我做ajax請求從我的瀏覽器接受請求它不會在客戶端添加cookie。因此,當一個新的請求,從客戶端生成,服務器不會對其進行身份驗證並拋出401

我很困惑,無論是瀏覽器的問題或者我從AJAX請求

請幫助缺少的東西。

+0

你碰巧知道哪個域名服務器正在創建cookie? Cookie域和網站域衝突的可能原因之一。 –

+0

簡單的需要請求(來自第三方的請求)不允許使用cookie。 – dandavis

+0

您可以分享您用於執行ajax請求的代碼,以及身份驗證服務器和網站的域名嗎?可能是@MaheshChavda建議的CORS問題;某些瀏覽器在進行跨域ajax請求時拒絕處理'Set-Cookie'標頭。您可以按照本答案中的建議使用'credentials'添加適當的選項http://stackoverflow.com/questions/8863571/cors-request-why-are-the-cookies-not-sent/8870830#8870830或(與角):http://stackoverflow.com/questions/19383311/angularjs-http-does-not-seem-to-understand-set-cookie-in-the-response。 –

回答

2

感謝您的答案。我正在嘗試它withCredentials的事情,但會話cookie沒有設置在我的本地。

我想到的原因是允許的起源。我需要在後端設置允許的來源。

如果使用憑證屬性傳遞XHR by是一個安全請求。因此,如果允許的來源與請求源相匹配,則客戶端瀏覽器僅保存cookie。

所以簡單的修復方法是將主機更改爲與允許的原點相匹配的東西。

在節點末尾,我需要做origin: 'domain.com' 並且在前端我需要將我的服務器(本地主機)設置爲指向test.domain.com。和賓果。有效。!

3

如果使用「取」,你需要添加一個關鍵

{ 
     headers: req.headers, 
     credentials: 'include' 
} 
+0

我不知道是誰降低了這一點,因爲這對於'fetch()'是絕對正確的。 – Anne

+0

@安妮普茲如果你覺得r8 ... – prateekbh

1

如果您正在使用XHR請求,那麼你需要設置withCredentials爲true。它應該解決問題,如果沒有請提供代碼

+0

你能擴展你的答案與一些示例代碼? – ManoDestra

1

我在Chrome中使用Angular 4時遇到了這個問題(IE正在工作)。

客戶端在localhost上的請求:4200到localhost上的WebApi:24336。 如果所有CORS設置爲「Access-Control-Allow-Credentials」value =「true」「Access-Control-Allow-Origin」value =「http:// localhost:4200」等,並且正在傳遞{withCredentials: true},例如http.post(url,{},{withCredentials:true})。

的修復,對我來說,是設置默認RequestOptions爲{withCredentials:真正}按照步驟https://angular.io/api/http/BaseRequestOptions並添加以下內容提供商:在app.module.ts

,{provide: RequestOptions, useClass: MyOptions} 
相關問題