尝试使用 Node.js 将用户加入 Stripe Connect 时出现 CORS 错误

Getting a CORS error when trying to onboard users to Stripe Connect with Node.js

我正在尝试设置我们的平台以允许用户使用 Stripe Connect 从我们的平台进行连接。

我正在关注链接到文档的 stripe-examples/connect-onboarding-for-standard。这是我正在使用的代码。

app.get("/api/stripe/onboard-user/refresh", async (req, res) => {
  if (!req.session.accountID) {
    res.redirect("/");
    return;
  }

  try {
    const { accountID } = req.session;
    const origin = `${req.secure ? "https://" : "https://"}${req.headers.host}`;

    const accountLink = await stripe.accountLinks.create({
      type: "account_onboarding",
      account: account.id,
      refresh_url: `${origin}/api/stripe/onboard-user/refresh`,
      return_url: `${origin}/settings/invoicing`,
    });

    res.redirect(303, accountLink.url);
  } catch (err) {
    res.status(500).send({
      error: err.message,
    });
  }
});

每件事都能找到 res.redirect(303, accountLink.url);那时它会抛出一个错误。

从源 'https://localhost:4200' 访问位于 'https://connect.stripe.com/setup/s/1JdWa4pVJGhR'(从 'https://localhost:4200/api/stripe/onboard-user' 重定向)的 XMLHttpRequest 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:否'Access-Control-Allow-Origin' header 出现在请求的资源上。

我可以从错误消息中提取 url 并将其放入浏览器,它可以正常访问页面,我可以完成该过程。我尝试更改 headers 但没有找到解决方案。

错误经常发生是因为您的 client-side 代码正在向您的服务器发出 GET 请求,期望在 AJAX/fetch 调用中得到 JSON 响应,但您的服务器正在直接重定向。这失败了,因为浏览器不知道在这种情况下该怎么做。

通常,您需要做的是更改 client-side 调用以不执行 fetch() 或 AJAX 等效操作,而是向您的端点提交整页,然后重定向。或者,您需要 return Node.js 代码中的 URL 而不是重定向,并让您的客户端从响应和重定向中提取 URL。