当前位置: 首页 > 知识库问答 >
问题:

使用带有Express、React、cors、Cookies-'Access-Control-Allow-Origin'头的fetch

端木志诚
2023-03-14

花了很多时间想弄清楚这一点,但没有成功。我正试着用cookie让csurf保护运行。目前,我已经尽可能地简化了下面的代码。我正在Express上运行从React到另一台服务器的提取请求。它给出了错误:

“CORS策略阻止了在”http://localhost:3003/testlogin“从origin”http://localhost:3000“获取的访问:请求的资源上没有”access-control-allow-origin“标头。如果不透明的响应符合您的需要,请将请求的模式设置为”no-cors“以在禁用CORS的情况下获取资源。”

据我所知,'Access-Control-Allow-Origin'头是在我的CorsOptions中设置的。所以它不应该抛出这个错误。我显然错过了什么。感激地得到的任何帮助。

快速服务器:

const cookieParser = require("cookie-parser");
const cors = require('cors')
const express = require("express");
const csrf = require("csurf");

const app = express();

const csrfMiddleware = csrf({ cookie: true });

app.use(cookieParser());

const corsOptions = {
  origin: 'http://localhost:3000',   
  methods: "GET,HEAD,POST,PATCH,DELETE,OPTIONS",
  credentials: true,               
  allowedHeaders: "Content-Type, Authorization, X-Requested-With, Accept",
}
app.options('*', cors(corsOptions))

app.use(csrfMiddleware);

app.post("/testlogin", cors(corsOptions), (req, res) => {
  console.log('test login reached', );
  res.end(JSON.stringify({ status: "success" }));
});

const PORT = process.env.PORT || 3003;
app.listen(PORT, () => {
  console.log(`Listening on http://localhost:${PORT}`);
});

前端(react):

function testClick() {
  console.log("testClick Clicked");

  let urlToGetUserProfile = 'http://localhost:3003/testlogin'

  return fetch(urlToGetUserProfile, {
    method: "POST",
    headers: {
      Accept: "application/json",
      "Content-Type": "application/json",
    },
    credentials: "include",
    body: JSON.stringify({ idToken: "idTokengoeshere" }),
  })
    .then((fetchResponse) => {
      console.log(fetchResponse);
    })
}

共有1个答案

夏长卿
2023-03-14

cors中间件之前调用csrfmiddleware中间件函数。

它抛出ForbiddenError:无效csrf令牌,从而阻止CORS中间件向响应添加头。

您可以通过将cors中间件放在首位来解决这个问题。

app.use(cors(corsOptions));
app.use(csrfMiddleware);

app.post("/testlogin",(req, res) => {
  console.log('test login reached', );
  res.end(JSON.stringify({ status: "success" }));
});
 类似资料:
  • 问题内容: 将web.xml移植到Java配置后出现以下问题 根据一些Spring参考,尝试了以下尝试: 所选择的值来自有效的web.xml过滤器: 有什么想法为什么Spring java config方法不能像web.xml文件那样工作? 问题答案: 将CorsMapping从更改方法。 为整个应用程序启用CORS很简单: 你可以轻松更改任何属性,以及仅将此CORS配置应用于特定的路径模式: 控

  • Response.AddHeader(“Access-Control-Allow-Origin”,“*”)是如何实现的;行设置多个标题时,包括,但没有当我删除它?

  • 我从ASP.NET表单中调用这个函数,在调用Ajax时在firebug控制台中得到以下错误。 跨源请求被阻止:同一源策略不允许读取http://anotherdomain/test.json上的远程资源。(原因:CORS标头“Access-Control-Allow-Origin”丢失)。 我做了其他的方法,但仍然找不到解决办法。 注意:我没有服务器权限进行服务器端(API/URL)更改。

  • 虽然已经通过API网关设置了CORS,并且设置了头,但在尝试在Chrome内从AJAX调用API时,我仍然收到以下错误: XMLHttpRequest无法加载http://xxxxx.execute-api.us-west-2.amazonaws.com/beta/yyyyy。请求的资源上没有“access-control-allow-origin”标头。因此不允许访问源“null”。响应的HTT

  • XMLHttpRequest无法加载http://localhost:8080/nobelgrid/api/users/create/。请求的资源上没有“访问-控制-允许-来源”标头。因此,不允许访问源'http://localhost:63342'。响应的HTTP状态代码为500。 谁能帮帮我吗? 更新: 但我还有一个错误。我会做另一个问题,因为我认为这是一个不同的论点。 提前感谢!