如何通过CORS传递Cookie?

时间:2018-09-02 23:10:17

标签: node.js express cors axios

我有一个项目,可以使用Axios从客户端发送HTTP请求

axios.create({
    baseURL: `http://localhost:8081/`,
    withCredentials: true
  })

我想这允许cookie-我确信它会在请求之前显示在浏览器中-与请求一起发送。

该错误出现在日志中时,该问题发生在后端:

  

对预检请求的响应未通过访问控制检查:   响应中“ Access-Control-Allow-Origin”标头的值必须   当请求的凭据模式为时,不是通配符“ *”   '包括'。因此,不允许原点“ http://localhost:8080”   访问。发起的请求的凭据模式   XMLHttpRequest由withCredentials属性控制。

我尝试过:

app.use(cors({
  //origin : to be set later
  credentials: true,
}))

这是相反的:

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, Authorization");
  res.header("Access-Control-Allow-Credentials", true);
  next();
});

但似乎都不起作用。

任何帮助将不胜感激。

编辑1: 我正在使用cookie解析器,我很确定它将cookie附加到要求中。

我的app.js文件没有其他可能导致此类问题的中间件,除了CORS和Cookie解析器。

编辑2:应要求,我调用了此命令:

  

curl -v -X选项http://localhost:8081

这就是结果:

Rebuilt URL to: http://localhost:8081/
*   Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 8081 (#0)
> OPTIONS / HTTP/1.1
> Host: localhost:8081
> User-Agent: curl/7.47.0
> Accept: */*
>  < HTTP/1.1 204 No Content < X-Powered-By: Express < Access-Control-Allow-Origin: * < Access-Control-Allow-Methods: GET,HEAD,PUT,PATCH,POST,DELETE < Vary: Access-Control-Request-Headers < Content-Length: 0 < Date: Sun, 02 Sep 2018 23:31:11 GMT < Connection: keep-alive

2 个答案:

答案 0 :(得分:0)

我知道对OP来说为时已晚,但对于那些一直来这里的人-帮助我的是:

app.use(cors({
  preflightContinue: true,
  credentials: true,
}));

来源:https://expressjs.com/en/resources/middleware/cors.html

答案 1 :(得分:0)

我遇到了这个问题,我通过将标头 "Access-Control-Allow-Origin" 设置为我的前端的 URL 而不是“*”来解决它

更多详情:https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS/Errors/CORSNotSupportingCredentials