angular - CORS 环境中未发送 Session-Cookie

标签 angular express cookies cross-domain session-cookies

我拼命想让 session cookie 在我的环境中工作,但到目前为止运气不好。

我的后端是一个 node/express 应用程序,在端口 3000 上运行。CORS 是这样启用的:

const corsOptions = {
    origin: "http://127.0.0.1:4300",
    allowedHeaders: [ "Origin", "X-Requested-With", "Content-Type", "Accept", "Authorization", "x-xsrf-token" ],
    credentials: true
};
if (isDebug) {
    corsOptions.maxAge = 1;
}
app.use(cors(corsOptions));

我正在使用快速 session 和通行证进行登录。 session 配置如下:

const options = {
    secret: '...',
    cookie: { httpOnly: true }
};

app.use(session(options));

前端是一个 Angular 2 SPA,在端口 4300 上运行。当我从我的快速服务器为前端提供服务时,一切都按预期工作。但如果不是,我会遇到以下晦涩的问题:

登录路由返回一个带有 session ID 的 cookie。但是发送到后端的下一个请求是用不同的 session ID 发送的?!我不知道这个不同的 session ID 从何而来。特别是因为 session cookie 被标记为仅 HTTP。

HTTP 请求发送如下:

const response = this.http.get(url, { withCredentials: true });

我尝试了以下方法:

  • 确保浏览器允许第三方 cookie => 没问题。
  • 尝试将 httpOnly 设置为 false => 失败。
  • 试验过 cookie 域:将其设置为后端地址 - 运气不好。然后到前端的地址 - 也没有用。
  • 清除了浏览器和 cookie 缓存,试用了 Google Chrome 和 Edge。没有任何帮助。

有人知道拼图的哪一部分缺失了吗?

非常感谢, 史蒂文

最佳答案

天哪,我缩小了范围,终于找到了问题所在:

登录请求没有设置了 withCredentials-Flag...我认为只有在收到 cookie 之后,后续请求才需要这样做。但实际上它是用来存储跨域接收到的 cookie。

关于angular - CORS 环境中未发送 Session-Cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45386185/

相关文章:

javascript - (Angular)在我的情况下如何返回不同的 Observable 类型请求?

javascript - Angular 2 中的动态模板 URL

json - 在 express 中获取带有查询字符串的请求

ruby-on-rails-3 - 使用 Poltergeist PhantomJS Capybara 驱动程序设置 Cookie

javascript - document.cookie 的 QUnit 问题

html - 列和行未正确对齐

arrays - Angular 2 & Bootstrap - 根据数组中元素的数量将列表分成两列

node.js - 从完整格式的响应触发大文件下载

javascript - 我如何在 Sequelize 中找到一小时外的值

ruby-on-rails - 使用 Rails 自动登录?