2014-03-28 154 views
2

我的問題:我的瀏覽器沒有獲取會話cookie設置。這會導致對服務器的所有請求不相互關聯(例如,1)進行身份驗證,然後2)獲取一些數據)。設置瀏覽器cookie

背景/背景:

我建立具有移動和網絡側到它的產物。我開發了這個網站,它的工作很好,所以現在我正在使用Cordova開發移動應用程序(所有這些都是JavaScript)。我想爲我的網站使用與移動應用程序相同的後端。

當我測試所有內容時,我只想在瀏覽器中運行我的應用程序,所以我不必一直模擬iOS設備,而是在瀏覽器中獲得更好的調試工具。爲了做到這一點,我在包含所有html/css/js文件的目錄上運行一個簡單的http服務器。在我開始與服務器交互之前,一切似乎都很好。

我的設置

服務器上的本地主機上運行:3000。 cordova應用程序正在localhost:3001上運行。當移動應用程序加載時,它所做的第一件事是http://localhost:3000/api/v1/auth/isAuthenticated,它返回{isAuthenticated: true|false}。端點所做的是無關緊要的。與此相關的是,瀏覽器中的移動應用程序無法獲取sessionId Cookie設置,因此所有到localhost:3000上的服務器的請求都具有不同的sessionId,因此即使我能夠正確進行身份驗證,我接下來的請求與驗證的用戶沒有關聯,因爲它沒有sessionId cookie。

我的問題:什麼是解決此問題的好方法?我如何在剛剛觸及端點的瀏覽器上設置Cookie?我是否應該使用類似oauth2orize的東西並進行某種令牌交換?

其它有趣的註解:

  • 我使用express.js會議。我實際上已經用最新的3.x版本和4.x的候選版本來嘗試這個。這個伎倆也沒有。
  • 當我在iOS模擬器中模擬移動應用程序時,一切正常(只是不是開發的最佳位置)
  • 我使用CORS來允許我的localhost:3000響應來自localhost:3001的請求。請求正在工作,這只是沒有設置的cookie是問題。
  • platypus是下蛋而不是生完孩子:)

由於唯一的哺乳動物!

+0

所以你的問題基本上是爲什麼不是在移動瀏覽器中設置cookie?我們可以看到應該設置cookie的代碼嗎? – AlexMA

+0

@AlexMA,實際上它不能在桌面上的實際瀏覽器中工作,這就是我遇到問題的地方。 Cookie設置邏輯位於[黑盒](https://github.com/expressjs/session)中。但我在想,我可能沒有正確使用黑匣子。 – kentcdodds

+1

也許嘗試用npm模塊「cookies」設置一些簡單的非會話cookie。應該花一點時間檢查cookie是否可以工作。 – AlexMA

回答

0

看起來像是一個安全問題。服務器不允許在其他域的瀏覽器上設置cookie。所以業界已經提出了一個解決方案:JSON Web Tokens。我在一兩個小時後實現了它,它似乎工作得很好。

+0

P.S.我實際上已經在[egghead.io](https://egghead.io/)上創建了[截屏視頻系列](https://egghead.io/series/angularjs-authentication-with-jwt)關於這個概念,如果你'重新感興趣:-) – kentcdodds