问题描述
上下文
我有一个带有两种类型客户的快递服务器。
I have an express server with two types of clients.
-
我的应用程序(React + graphql):我已为此客户端启用凭据:
app.use(cors({凭据:true,来源: http :// localhost:3000}));
我已对此进行了设置,以便可以从我的gql客户端接收与身份验证相关的cookie。
My app (React + graphql): I've enabled credentials for this client:
app.use(cors({ credentials: true, origin: "http://localhost:3000" }));
I've set this so that I can receive auth-related cookies from my gql client.
第三方服务(通过我提供的http客户端)。这些请求可以来自任意多个来源。
Third-party services (via http client I provide). These requests can come from any number of origins.
我不能对原点使用通配符( cors({origin:*})
),因为这将允许任何站点使用我的用户的身份验证cookie。但是,如果我不通过通配符运算符,则第三方客户端将无法发出请求。
I can't use the wildcard operator for the orgin (cors({origin: *})
) as this would allow any site to use my users' auth cookies. However, if I don't pass the wildcard operator, third-party clients can't make requests.
我尝试在特定路由上启用通配符未成功。
I've tried unsuccessfully to enable the wildcard on a specific route.
问题
我可以为不同来源设置不同的cors政策吗?
Can I set different cors policies for different origins?
推荐答案
您有几种选择。
- 您可以设置一个动态的cors处理程序,无需使用*就可以允许原点。
- 您可以从cookie中获取所需的任何内容,并将其以其他方式传递(作为查询)例如,
您可以编写程序控制的cors处理程序,该处理程序可以允许一个域,某些域,所有域
You can write a programmatically controlled cors handler that can allow one domain, some domains, all domains, however you write the code.
这里是一个允许所有域不使用*的代码:
Here's one that allows all domains without using *:
var corsOptions = {
origin: function (origin, callback) {
console.log(`Origin ${origin} is being granted CORS access`);
callback(null, true)
}
}
app.use(cors(corsOptions));
您也不必在全球范围内应用。您只能将其应用于某些路由或仅应用于某些路由器。
You don't have to apply this globally either. You can apply it only to certain routes or only to certain routers.
此处的示例:(在CORS模块文档中)。
Examples here: https://www.npmjs.com/package/cors in the CORS module documentation.
这篇关于我可以设置仅允许特定来源传递Cookie(Node.js)的动态cors策略吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!