尝试使用 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。
我正在尝试设置我们的平台以允许用户使用 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。