2014-03-28 59 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