firebase - 如何让我的快速服务器使用 cors 将客户端重定向到不同的域?
问题描述
我有一个已经启用了 cors 中间件的快速服务器。
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' 不允许访问。
查看我的客户对贝宝的请求,您还可以看到来源为空。
(请注意,禁用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 ”。
我还需要在快递服务器上设置什么才能将客户端重定向到贝宝?
解决方案
重定向的工作方式如下:
- 客户端发出 HTTP 请求
- 服务器做出 HTTP 响应,其中包含请求不同 URL 的指令
- 客户端向不同的 URL 发出 HTTP 请求
- 服务器(可能是不同的服务器)做出 HTTP 响应
如果在第 2 步,服务器授予通过 CORS 读取响应的权限,则授予该请求的权限。
第 2 步的响应(由您的服务器生成)无法授予读取第 4 步响应的权限(由PayPal 的服务器生成)。
如果 Paypal 未授予 CORS 权限,则您的 JavaScript 无法读取响应。
(想象一下,如果不是这样:EvilHacker.Net 授予 CORS 权限,然后重定向到 GMail.com,然后 EvilHacker 可以阅读您的所有电子邮件!)
推荐阅读
- asp.net-ajax - 无法使用 C# 与 Xero SDK 建立连接
- kubernetes - 如何创建由预先存在的 EBS 卷支持的 PVC/PV?
- postgresql - PostgreSQL 导出的 csv 文件无法在 ms Sql Server 数据库中读取
- c++ - Angular 8 上的 Websocket 客户端和 C++ 控制台中的服务器
- typescript - 从可选的构造函数参数的返回类型推断类型
- azure-traffic-manager - 流量管理器不显示我刚刚创建的网络应用程序
- typescript - 与 NestJS 集成时,Sentry 未获取 TypeScript 源映射
- java - 查询参数中的奇怪问题
- java - 我在某处阅读了一个代码,它分配了 Toolbar toolbar = findViewById(R.id.toolbar) 然后 setSupportActionBar(toolbar); 这里发生了什么?
- reactjs - 子 React 组件总是落后一个更新