【问题标题】:How can I get my express server to redirect the client to a different domain using cors?如何让我的快速服务器使用 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?

【问题讨论】:

    标签: firebase express cors google-cloud-functions


    【解决方案1】:

    重定向工作如下:

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

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

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

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

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

    【讨论】:

    • 谢谢你,通过请求客户端让它工作:)
    • @Jonathan002 我面临着类似的情况。请解释一下你做了什么。
    猜你喜欢
    • 2020-02-24
    • 2020-01-20
    • 1970-01-01
    • 2015-05-29
    • 2019-04-17
    • 2021-02-04
    • 1970-01-01
    • 2012-07-17
    • 1970-01-01
    相关资源
    最近更新 更多