我目前在我的React和Play應用中實現了OAuth與LinkedIn的登錄,並且在嘗試重定向到運行時出現CORS錯誤在我的開發環境授權頁面:Oauth重定向返回沒有'Access-Control-Allow-Origin'標題出現在請求的資源上
XMLHttpRequest cannot load https://www.linkedin.com/oauth/v2/authorization?response_type=code&client_i…basicprofile&redirect_uri=http%3A%2F%2Flocalhost%3A9000%2Fusers%2Flinkedin. Redirect from 'https://www.linkedin.com/oauth/v2/authorization?response_type=code&client_i…basicprofile&redirect_uri=http%3A%2F%2Flocalhost%3A9000%2Fusers%2Flinkedin' to 'https://www.linkedin.com/uas/login?session_redirect=%2Foauth%2Fv2%2Flogin-s…' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.
我有以下設置:
- 遊戲服務器在本地主機上運行:9000
- 作出反應的應用程序(創建通過創建反應的-APP)在本地主機上運行:3000
我的JS代碼調用/auth/linkedin
端點其執行如下:
Action { implicit req: RequestHeader =>
val csrfToken = CSRF.getToken.get.value
Redirect(linkedinUrl(oauthConfig.linkedinClientId, csrfToken)).withSession("state" -> csrfToken)
}
我有我的Play應用程序設置爲妥善處理CORS。
我的反應程序只是使上述終端的請求通過愛可信:
axios.get('/auth/linkedin')
這與重定向到LinkedIn AUTH頁面,然後給我的錯誤一個303響應。
如何在此dev設置中正確使用CORS策略?我試着添加以下到我的package.json作爲創建反應的應用程序內的文檔推薦:
"proxy": "http://localhost:9000",
而且我也嘗試設置請求頭"Access-Control-Allow-Origin" : "*"
對重定向的播放服務器沒有成功。
請注意,轉到localhost:9000/auth/linkedin會正確重定向。
感謝您的有用信息!奇怪的是,如果我只是做一些像'Linkedin'點擊鏈接的工作很好,任何想法爲什麼會通過axios請求通過失敗?我認爲只是做一個鏈接對我來說可能是最簡單的。 –
當您點擊創建* navigation *的鏈接時,這與從前端JavaScript代碼發出請求並使用響應非常不同。瀏覽器不會阻止跨瀏覽器的導航(否則整個網絡將無法工作...) - 但瀏覽器確實阻止前端JavaScript代碼能夠從跨源請求獲取響應,除非發送請求的站點/服務器指示它正在選擇接收這樣的請求。而服務器選擇接收跨域請求的方式是,它們在其響應中包含Access-Control-Allow-Origin標頭 – sideshowbarker
@sideshowbarker非常感謝您的幫助,您節省了我的時間。幾乎在運行谷歌oauth相同,我嘗試了所有可能的方式,但沒有運氣!最後你的評論解決了我的問題。我沒有調用api調用,而是將它作爲錨標記,它工作正常。非常感謝。 –