节点JS CORS模块未设置Access-Control-Allow-Credentials标头

时间:2016-11-07 15:25:17

标签: angularjs node.js cors preflight

尝试使用像这样的CORS模块配置在Node Js中全局设置Access-Control-Allow-Credentials标头

`var cors = require('cors');
 var corsOptions = {
     origin: true,
     'Access-Control-Allow-Origin': 'localhost:1550'
     'Access-Control-Allow-Credentials': 'true'
 };

app.use(cors(corsOptions));`

这似乎不起作用,所以我也为尝试设置预检响应的路线设置了它。我这样设置

`router.options('/login', cors(corsOptions));`

我查看了Chrome开发者工具,但我看到Access-Control-Allow-Origin标题设置了但Access-Control-Allow-Credentials未设置。我需要这个标题,因为我在Angular中设置了withCredentials = true

为什么Node JS没有设置Access-Control-Allow-Credentials标头,而是设置其他标头?

我知道这是因为我在控制台中收到以下错误

XMLHttpRequest cannot load http://www.localhost:1550/api/v1/auth/login. Response to preflight request doesn't pass access control check: Credentials flag is 'true', but the 'Access-Control-Allow-Credentials' header is ''. It must be 'true' to allow credentials. Origin 'http://127.0.0.1:1550' is therefore not allowed access.

2 个答案:

答案 0 :(得分:2)

我认为您没有正确设置配置。与文档中一样

https://www.npmjs.com/package/cors#configuration-options

 var corsOptions = {
 origin: 'localhost:1550',
 credentials : true
}

这将设置凭据标头。由于Origin设置了Access-Control-Allow-Origin,因此凭据设置了Access-Control-Allow-Credentials。

答案 1 :(得分:1)

您遗漏了有关您使用的库的详细信息。是快递吗?发布完整的代码。

由于您只是明确指定标题,因此您可以删除cors模块。 你可以调整这个答案 In Node.js/Express, how do I automatically add this header to every "render" response?