我拼命想让 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/