Node.js CORS正在使用凭据阻止请求

Node.js CORS正在使用凭据阻止请求,node.js,angular,cors,Node.js,Angular,Cors,我不熟悉节点和角度。我在发送带有凭据的请求时遇到Cors问题:true选项。当我发送此类请求时,我得到: 响应中“Access Control Allow Origin”标头的值 当请求的凭据模式为时,不能为通配符“*” “包括”。` 当发送没有这个选项的请求时,我没有得到任何错误。Angular正在运行,Nodejs正在运行。看来cors模块不能正常工作 在NodeJs服务器中,我使用cors模块: const cors = require('cors'); const corsOption

我不熟悉节点和角度。我在发送带有凭据的请求时遇到Cors问题:true选项。当我发送此类请求时,我得到:

响应中“Access Control Allow Origin”标头的值 当请求的凭据模式为时,不能为通配符“*” “包括”。`

当发送没有这个选项的请求时,我没有得到任何错误。Angular正在运行,Nodejs正在运行。看来cors模块不能正常工作

在NodeJs服务器中,我使用
cors
模块:

const cors = require('cors');

const corsOptions = {
  origin: 'http://localhost:4200',
  optionsSuccessStatus: 200,
  credentials: true
};

app.use(cors(corsOptions));
服务器上的req.headers:

{ host: 'localhost:1234',
  connection: 'keep-alive',
  'content-length': '44',
  accept: 'application/json, text/plain, */*',
  origin: 'http://localhost:4200',
  'user-agent':
   'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',
  'content-type': 'application/json',
  'sec-fetch-site': 'same-site',
  'sec-fetch-mode': 'cors',
  referer: 'http://localhost:4200/login',
  'accept-encoding': 'gzip, deflate, br',
  'accept-language': 'pl-PL,pl;q=0.9,en-US;q=0.8,en;q=0.7' }

编辑:像在私有模式下运行浏览器这样简单的事情似乎解决了这个问题…

您可以通过如下设置标题来尝试:

app.use(function (req, res, next) {

    // UI port you wish to allow to connect
    res.setHeader('Access-Control-Allow-Origin', 'http://localhost:4200');
    ...
}
用户界面:


当我们将凭据传递给后端服务时,必须指定url端口。

我遇到了相同的问题,不是这个模块,而是在开发模式和使用另一台服务器时发送凭据。我认为问题可能出在不安全的连接上(
http
而不是
https
),当然,localhost总是无法解决的

我使用代理(
proxy.conf.json
)解决了这个问题,将url重新路由到预期的url,使浏览器在开发时认为它是同一个源。 (此处描述:)

并将其包含在该项目的构建选项下的
angular.json中:

... 
"projects" : {
    "YOUR_PROJECT_NAME" : {
        ...
        "architect": {
            ...
            "serve": {
                "builder": "@angular-devkit/build-angular:dev-server",
                "options": {
                    "proxyConfig" : "proxy.conf.json",
                    "browserTarget": "YOUR_PROJECT_NAME:build"
                }
            }
        },
       ...
    }
}

我不确定这是否也解决了您的问题,但可能值得一试。

在节点中启用跨源资源共享(CORS)。CORS本质上意味着跨域请求

只需使用这行代码在响应上设置一个标题,即可启用CORS

app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
});

您可以尝试将您的源(
localhost
)添加到
访问控制允许源
。在短时间内,您可以禁用CORS并尝试此命令“chrome--disable web security--disable site isolation trials--user data dir=c:\chromeSession”使用cmd或Cntr+R运行此命令这只是为了交叉检查我会使用代理。谢谢,不幸的是,这没有什么区别。错误是相同的。您是否从UI传递
{withCredentials:true}
?是的,当出现错误时,我传递{withCredentials:true},没有{withCredentials:true}它工作正常。嗯。。对不起,我帮不上忙了。我在.net中实现了这一点,注意节点:(
... 
"projects" : {
    "YOUR_PROJECT_NAME" : {
        ...
        "architect": {
            ...
            "serve": {
                "builder": "@angular-devkit/build-angular:dev-server",
                "options": {
                    "proxyConfig" : "proxy.conf.json",
                    "browserTarget": "YOUR_PROJECT_NAME:build"
                }
            }
        },
       ...
    }
}
app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
});