如何让我的快速服务器使用 cors 将客户端重定向到不同的域?

Posted

技术标签:

【中文标题】如何让我的快速服务器使用 cors 将客户端重定向到不同的域?【英文标题】:How can I get my express server to redirect the client to a different domain using cors? 【发布时间】:2018-10-27 08:02:42 【问题描述】:

我有一个已经启用了 cors 中间件的 express 服务器。

https://myapi.com

app.use(cors( origin: true ));

我有一个单页应用程序,它发出一个请求,并假设在之后重定向到贝宝。 (它来自不同的来源,如下所列)

https://myAngularApp.com(一些服务)

http.post('https://myapi.com/create-payment', data);

所以回到快递服务器,我想将它们发送到贝宝进行身份验证:

app.post('/create-payment', (req, res) => 
  res.redirect('https://www.sandbox.paypal.com/somewhere..');
)

回到客户端我得到以下错误:

无法加载https://www.sandbox.paypal.com/somewhere:对预检请求的响应未通过访问控制检查: 请求中不存在“Access-Control-Allow-Origin”标头 资源。因此不允许访问 Origin 'null'。

查看我的客户向paypal发出的请求,您还可以看到来源为空。


(请注意,禁用app.use(cors( origin: true )); 将不允许客户端从服务器获得正常响应,因此这已经表明cors中间件已链接。

注释掉 cors 时出错

// app.use(cors( origin: true )); - Commented Out

未能加载“https://myapi.com/create-payment”:重定向自 'https://myapi.com/create-payment' 到 'https://www.sandbox.paypal.com/somewhere.'已被 CORS 阻止 政策:没有“Access-Control-Allow-Origin”标头出现在 请求的资源。原点 'https://myAngularApp.com' 因此不是 允许访问。


我还需要在 express 服务器上设置什么才能将客户端重定向到 paypal?

【问题讨论】:

【参考方案1】:

重定向工作如下:

    客户端发出 HTTP 请求 服务器发出 HTTP 响应,其中包含请求不同 URL 的指令 客户端向不同的 URL 发出 HTTP 请求 服务器(可能是不同的服务器)做出 HTTP 响应

如果在第 2 步中,服务器授予通过 CORS 读取响应的权限,则授予请求的权限。

第 2 步的响应(由 您的 服务器生成)无法授予读取第 4 步响应的权限(由 PayPal 的 服务器)。

如果 Paypal 未授予 CORS 权限,则您的 javascript 无法读取响应。

(想象一下,如果不是这样:EvilHacker.Net 授予 CORS 权限,然后重定向到 GMail.com,然后 EvilHacker 可以阅读您的所有电子邮件!)

【讨论】:

谢谢你,通过请求客户端让它工作:) @Jonathan002 我面临着类似的情况。请解释一下你做了什么。

以上是关于如何让我的快速服务器使用 cors 将客户端重定向到不同的域?的主要内容,如果未能解决你的问题,请参考以下文章

重定向到 github omniauth 路由时如何解决 CORS 错误?

CORS 请求重定向失败

Salesforce Oauth 重定向 CORS 问题节点快速应用程序

注销重定向时出现 Keycloak CORS 问题

在快速服务器上成功调用 api 后重定向具有角度路由的页面

ReactJS 发送 GET 请求,响应 302 重定向,收到 CORS 错误