【发布时间】: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