2017-10-16 115 views
0

試圖關注​​我無法使用fetch從我的https webpack-dev-server重定向。正如你所看到的,我正在提出請求。針對預檢的條紋授權重定向響應無效或需要「Access-Control-Allow-Origin」標題(重定向)

return fetch(`https://localhost:3443/stripeAuthorize`, { 
     method: 'GET', 
     headers: { 
     "Access-Control-Allow-Origin": "https://localhost:3443", 
     'Accept': '*/*', 
     } 
    }) 
    .then((data) => { 
     return data.json() 
    }) 
    .then((json) => { 
     console.log('redirectjson', json) 
    }) 
    .catch((err) => { 
     console.log('stripe redirect err caught: ', err) 
    }) 

展望鉻的網絡選項卡里面我看到的狀態代碼「303查看其它」兩個選項和GET

請求報頭:

Accept:*/* 
Accept-Encoding:gzip, deflate, br 
Accept-Language:en-US,en;q=0.8,es;q=0.6,th;q=0.4,zh-TW;q=0.2,zh;q=0.2,la;q=0.2,ja;q=0.2 
Access-Control-Request-Headers:access-control-allow-origin 
Access-Control-Request-Method:GET 
Cache-Control:no-cache 

我也注意到,獲取網絡通話是在瀏覽器傳入的OPTIONS之上,GET調用將在OPTIONS之前出現,這似乎很奇怪。我似乎無法從條紋或http協議獲取任何其他信息。服務器上沒有錯誤調用

如何調試此問題,爲什麼分條重定向不起作用?

編輯:我想我說得很清楚,如果我刪除「訪問控制允許來源」我得到的錯誤:

無法加載 https://connect.stripe.com/express/oauth/authorize?client_id=ca_BR4uV37xvFoKjLE5g9g2wzcmYNT0jnXZ&state=xy5z4k7lpe7rkwyerlxv9rudi&stripe_user%5Bbusiness_type%5D=company: 否「訪問控制允許-Origin'標題出現在請求的 資源中。原因'https://localhost:3443'因此不允許 訪問。如果一個不透明的響應滿足您的需求,請將請求的 模式設置爲'no-cors'以禁用CORS來獲取資源。

+0

從請求標頭中刪除''Access-Control-Allow-Origin「:」localhost:3443「;'。這就是您的瀏覽器發送OPTIONS請求的原因。 Access-Control-Allow-Origin頭是服務器發回的嚴格*回覆*頭。將其添加到請求中的唯一效果是導致瀏覽器執行預檢,從而導致某些可能會工作的內容。爲什麼在請求中發送Access-Control-Allow-Origin標頭?嘗試防止一些其他錯誤? – sideshowbarker

+0

@sideshowbarker我爲沒有讓自己更清楚而道歉我以爲我做了,如果我刪除Access-Control-Allow-Origin,我不允許訪問。 – mibbit

+0

如果您將Access-Control-Allow-Origin放入請求中,您也不被允許訪問 - 而是因爲觸發預檢而導致您得到不同的錯誤。它沒有啓用任何新的訪問。問題是來自「https:// localhost:3443/stripeAuthorize」的響應沒有Access-Control-Allow-Origin標頭。而且,因爲它沒有,您的瀏覽器會執行正常的默認同源Web安全策略,並阻止您的前端JavaScript代碼訪問響應。解決辦法是配置該服務器發送回訪問控制允許起源 – sideshowbarker

回答

0

你有些東西有點混亂起來。

Rocket Rides中的/authorize端點並不意味着要請求fetch()或AJAX,因此您需要將瀏覽器導航到它。

您所看到的是:您的服務器 - /stripeAuthorize端點 - 將重定向到Express入門流程(您的用戶將使用的HTML頁面)。這不是用CORS配置的,但是你用fetch()下載它,所以它失敗了。在入職流程

window.location.href = '/stripeAuthorize'; 

您的瀏覽器應該被重定向,你會發現自己(假設一切都正確配置):

相反的fetch('/stripeAuthorize').then(/*...*/),只要寫這個。