ExpressJS 不同的域名 - CORS

Posted

技术标签:

【中文标题】ExpressJS 不同的域名 - CORS【英文标题】:ExpressJS Different Domain Name - CORS 【发布时间】:2019-06-01 17:13:59 【问题描述】:

我有一个挑战,目前我正在为我的 expressjs 实现的响应发送的 cookie 设置域,但目前它只设置我的 expressjs 服务器所在的 IP 地址(端点)。

这是我的初始 CORS 配置;

router.use(function(req, res, next) 
res.header("Access-Control-Allow-Origin", "http://localhost:3000");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, 
Content-Type, Accept, pwd, email");
next();
);

这是我的身份验证部分中的 res.cookie 行;

 res.cookie('token', token, domain: "localhost", expires: new 
 Date(Date.now() + 600000*100000), httpOnly: true);

当我使用 chrome 登录时,很奇怪的是,我得到了 cookie,但在我的 expressjs 端点的 IP 地址下,可以说“http://88.13.91.0”,所以当我刷新时我会丢失它。我也没有在 expressjs api 的响应中看到响应中的“set-cookie”标头,但我确实得到了 cookie。我已经清除了 cookie 以确保它在尝试登录后会出现,所以我知道它不会过时。我还在我的 fetch 调用中将“credentials”设置为“include”,但没有运气。

我的问题是,如果域与端点不同,我是否无法设置域?我的想法是,这可能是一个安全问题,因此被阻止,因为没有人应该能够为不存在的域设置 cookie,或者我错了。

【问题讨论】:

【参考方案1】:

像这样尝试 CORS 并

import * as cors from "cors"; 

// 或

const cors = require ('cors');
    app.get("/", function (req, res) 
      res.setHeader("Content-Type", "application/x-www-form-urlencoded");
      res.setHeader("Access-Control-Allow-Origin", "*");
      res.setHeader(
        "Access-Control-Allow-Headers",
        "Origin, X-Requested-With, Content-Type, Accept"
      );

      res.setHeader("Access-Control-Allow-Credentials", true);

在你的所有中间件之上添加这个

app.use(cors());

【讨论】:

以上是关于ExpressJS 不同的域名 - CORS的主要内容,如果未能解决你的问题,请参考以下文章

不同的查询取决于可选的路由 - expressjs

ExpressJS & Websocket & 会话共享

ExpressJS 路由器规范化/规范 url

ExpressJS - 为通用 Nuxt 应用程序和 AngularJS SPA 提供服务

如何使用基于网站的 ExpressJs 设置 CORS 和 JWT 令牌验证

使用 Express js 订阅/发布