node.js - 设置浏览器cookie

标签 node.js cookies cordova express session-cookies

我的问题:我的浏览器未设置 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/

相关文章:

python - flask_login 有时会混合登录;我以其他人身份登录

cordova - 使用 Ionic 应用程序进行 Firebase 云消息传递

node.js - GraphQL.js Node/ express : How to pass object as GraphQL query argument

php - 覆盖 cookie 失败 PHP 和 ASP 跨子域

angularjs - Node.js CLI 到网页包装器

java - Android:在 HTTP Post 请求中使用 Cookie

javascript - 优化 Phonegap 应用程序的图像

javascript - 使用本地存储进行应用内购买和应用更新

node.js - MongoDB 保存用户时电子邮件和密码无效

node.js - NodeJS 服务器未从 Swift 客户端接收 Socket.emit()