2017-07-29 54 views
1

我拼命地嘗試讓會話cookie在我的環境中工作,但目前還沒有運氣。在CORS環境中沒有發送會話Cookie

我的後端是一個節點/ Express應用程序,在端口3000上運行CORS是這樣啓用:

const corsOptions = { 
    origin: "http://127.0.0.1:4300", 
    allowedHeaders: [ "Origin", "X-Requested-With", "Content-Type", "Accept", "Authorization", "x-xsrf-token" ], 
    credentials: true 
}; 
if (isDebug) { 
    corsOptions.maxAge = 1; 
} 
app.use(cors(corsOptions)); 

我使用登錄快遞會話和護照。會話配置是這樣的:

const options = { 
    secret: '...', 
    cookie: { httpOnly: true } 
}; 

app.use(session(options)); 

的前端是一個角2 SPA,在端口4300上運行。當我從我的快遞服務的服務器前端,按預期工作的一切。但是,如果沒有,我遇到以下隱晦的問題:

登錄路由返回帶有會話ID的cookie。但是對後端的下一個請求是以不同的會話ID發送的?!我不知道,這個不同的會話ID可能來自哪裏。特別是因爲會話cookie被標記爲僅限HTTP。

HTTP的請求如下發送:

const response = this.http.get(url, { withCredentials: true }); 

我試過如下:

  • 確認在第三方Cookie被允許在瀏覽器=>這是罰款。
  • 試圖將httpOnly設置爲false =>沒有運氣。
  • 用cookie域進行實驗:將其設置爲後端的地址 - 沒有運氣。然後到前端的地址 - 也沒有工作。
  • 清除瀏覽器和cookie緩存,試用Google Chrome和Edge。沒什麼幫助。

有沒有人有想法難題的哪個部分丟失?

非常感謝, 史蒂芬

回答

0

03,我把範圍縮小,終於發現了問題:

的登錄請求並沒有的withCredentials標誌集...我想只有在cookie已經收到之後,纔會需要這個請求。但實際上它存儲了跨域接收的Cookie。