【问题标题】:What keeps a browser request from being redirected due to improper CORS handling?由于不正确的 CORS 处理,是什么阻止了浏览器请求被重定向?
【发布时间】:2015-08-15 23:28:00
【问题描述】:

我正在尝试将数字支付 oauth 集成到我的应用中,但我无法处理这些服务所需的重定向。 PayPal 和 Stripe 都需要重定向到他们的网站以获得批准,然后才能重定向回我的网站。但是我的浏览器阻止了对付费服务的重定向,因为它声称不存在 access-control-allow-origin 标头。然而,我知道 Stripe 支持 CORS 标头:https://stripe.com/blog/stripejs-and-jsonp。我可能做错了什么?

重要的是,如果我在我的服务器 (localhost.com/authorize) 上手动将所需的 uri 输入到我的浏览器中,浏览器重定向就好了,但如果我的客户端中的脚本执行 GET 请求到相同的 URI,浏览器拒绝重定向并出现以下错误:

XMLHttpRequest 无法加载 connect.stripe.com/oauth/authorize。 请求中不存在“Access-Control-Allow-Origin”标头 资源。因此,不允许使用 Origin '127.0.0.1:3000' 使用权。响应的 HTTP 状态代码为 400。

因此,使用浏览器地址栏的手动 GET 请求和使用 ajax 的编程 GET 请求之间的唯一区别是浏览器将其识别为请求的发起者。为什么发起者决定这个动作的成败?

我正在执行从客户端到服务器的 jquery ajax 请求,如下所示:

    $.ajax({
        url: '/authorize',
        type: 'GET',
        success: function(data) {
          // do something
        }.bind(this),
        error: function() {
            // do something
        }.bind(this)
    });

我正在使用example code from stripe 来执行授权和重定向:

app.get('/authorize', function(req, res) {
  // Redirect to Stripe /oauth/authorize endpoint
  res.redirect(AUTHORIZE_URI + '?' + qs.stringify({
    response_type: 'code',
    scope: 'read_write',
    client_id: CLIENT_ID
  }));
});

【问题讨论】:

  • 通常,支持 CORS 的 Web 服务需要您为它们设置 AJAX 调用将来自的域。您可能需要将 127.0.0.1(或 127.0.0.1:3000)添加到您的配置中,以便 Stripe 接受来自该域的请求。

标签: javascript redirect paypal cors stripe-payments


【解决方案1】:

如果您希望用户在 ajax 请求期间或之后被重定向到 Stripe 或 Paypal,您不能在 ajax 请求本身上发出重定向。在 ajax 上下文中,您只是重定向 ajax 请求,这就是您看到 CORS 错误的原因。

要重定向窗口,您需要 app.get('/authorize'... 返回重定向 URL。

然后在您的$.ajax 成功函数中,您可以设置窗口位置:window.location = data.redirectUri 或打开一个新窗口(呃)。

【讨论】:

    猜你喜欢
    • 2015-03-09
    • 1970-01-01
    • 2015-05-09
    • 2023-01-19
    • 2023-03-03
    • 2015-12-17
    • 1970-01-01
    • 1970-01-01
    • 2018-12-23
    相关资源
    最近更新 更多