2015-08-15 81 views
1

我試圖將數字支付oauth集成到我的應用程序中,但我遇到了這些服務所需的重定向問題。 PayPal和Stripe都需要重定向到他們的網站進行審批,然後再重定向到我的網站。但是,我的瀏覽器阻止了重定向到付費服務,因爲它聲稱,目前沒有訪問控制允許來源標題。然而我知道Stripe支持CORS頭文件:https://stripe.com/blog/stripejs-and-jsonp。我可能做錯了什麼?由於不正確的CORS處理,瀏覽器請求是否被重定向?

重要,如果我手動鍵入我的服務器(localhost.com/authorize)所需的URI到我的瀏覽器,瀏覽器重定向就好,但如果在我的客戶端腳本執行GET請求同一個URI ,瀏覽器拒絕發生此錯誤的重定向:

XMLHttpRequest無法加載 connect.stripe.com/oauth/authorize。 請求的 資源上沒有「Access-Control-Allow-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 
    })); 
}); 
+0

通常,具有CORS支持的Web服務需要您爲其設置AJAX調用所來自的域。您可能需要將「127.0.0.1」(或「127.0.0.1:3000」)添加到您的配置中,以便Stripe接受來自該域的請求。 –

回答

0

如果您期望用戶在ajax請求期間或之後被重定向到Stripe或Paypal,你不能在ajax請求本身上發出重定向。在ajax環境中,您只是重定向ajax請求,這就是您看到CORS錯誤的原因。

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

然後在您的$.ajax成功功能中,您可以設置窗口位置:window.location = data.redirectUri或打開一個新窗口(ugh)。

相關問題