我的问题:我的浏览器未设置 session cookie。这会导致对服务器的所有请求不会相互关联(例如,1)进行身份验证,然后 2)获取一些数据)。
背景/上下文:
我正在构建一个具有移动端和网络端的产品。我已经开发了该网站,并且运行良好,所以现在我正在使用 Cordova 开发移动应用程序(所以都是 JavaScript)。我想为移动应用程序使用与网站相同的后端。
当我测试所有内容时,我只想在浏览器中运行我的应用程序,这样我就不必一直模拟 iOS 设备,并且我可以在浏览器中获得更好的调试工具。为了实现这一点,我在包含所有 html/css/js 文件的目录上运行一个简单的 http 服务器。在我开始与服务器交互之前,一切似乎都运行良好。
我的设置:
服务器正在 localhost: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 session 。实际上,我已经在最新的 3.x 版本和 4.x 候选版本中尝试过此操作。也没有成功。
- 当我在 iOS 模拟器中模拟移动应用时,一切都运行良好(只是不是最佳的开发环境)
- 我正在使用 CORS 来允许 localhost:3000 响应来自 localhost:3001 的请求。请求正常,只是 cookie 未设置才是问题所在。
- platypus是唯一一种产卵而不是分娩的哺乳动物:)
谢谢!
最佳答案
看起来这是一个安全问题。服务器不允许在其他域的浏览器上设置 cookie。于是业界就想出了解决办法:JSON Web Tokens 。我在一两个小时后实现了这个,看起来效果很好。
关于node.js - 设置浏览器cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22714208/