【发布时间】:2014-05-07 23:54:29
【问题描述】:
我的问题:我的浏览器没有设置会话 cookie。这会导致对服务器的所有请求不会相互关联(例如,1)进行身份验证,然后 2)获取一些数据)。
背景/上下文:
我正在构建一个具有移动端和网络端的产品。我已经开发了这个网站,它运行良好,所以现在我正在使用 Cordova 开发移动应用程序(所以它都是 JavaScript)。我想为移动应用使用与网站相同的后端。
在测试所有内容时,我只想在浏览器中运行我的应用程序,这样我就不必一直模拟 iOS 设备,并且我在浏览器中获得了更好的调试工具。为此,我在包含所有 html/css/js 文件的目录上运行了一个简单的 http 服务器。在我开始与服务器交互之前,一切似乎都很好。
我的设置:
服务器在 localhost:3000 上运行。科尔多瓦应用程序正在 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 是唯一一种不产卵而不是产卵的哺乳动物 :)
谢谢!
【问题讨论】:
-
所以你的问题基本上是为什么没有在移动浏览器中设置cookies?我们能看到应该设置 cookie 的代码吗?
-
@AlexMA,实际上它在桌面上的实际浏览器中不起作用,这就是我遇到问题的地方。 cookie 设置逻辑在black box 中。但我在想我可能没有正确使用黑匣子。
-
也许可以尝试使用 npm 模块“cookies”设置一些简单的非会话 cookie。只需花一点时间检查 cookie 是否正常工作。
标签: node.js cookies cordova express session-cookies