初始設置:Facebook並沒有查找在列表中「cancel_url」,「有效的OAuth重定向的URI」
我的應用程序使用Facebook的OAuth的體系,並擁有3個不同的環境:生產,測試和開發。我已經列出了Facebook應用程序的高級設置中的所有3頁有效重定向的URL(喜歡的人做here和here):
Valid OAuth redirect URIs:
http://myapp-pro.herokuapp.com,
http://myapp-tst.herokuapp.com,
http://myapp-dev.herokuapp.com
此外,在基本設置的應用程序有:
App domains: myapp-pro.herokuapp.com
Site URL: http://myapp-pro.herokuapp.com
目前爲止:
使用生產環境時,一切正常。
當測試或開發(兩者並不位於
App domains
或Site URL
):一個。當用戶登錄到我的網站,他已經登錄到Facebook,一切順利。
b。當在我的網站的用戶登錄,但他還沒有登錄到Facebook,Facebook的抱怨:
Given URL is not allowed by the Application configuration One or more of the given URLs is not allowed by the App's settings. It must match the Website URL or Canvas URL, or the domain must be a subdomain of one of the App's domains.
更多細節關於後一種情況:
當前瀏覽器中的當前URL是(並非完全相同,爲了清晰起見,我解碼了
next
和cancel_url
部件):https://www.facebook.com/login.php? skip_api_login=1& api_key=...& signed_next=1& next=https://www.facebook.com/v2.0/dialog/oauth? redirect_uri=http://myapp-dev.herokuapp.com? scope=public_profile& email& user_birthday& response_type=code& client_id=...& ret=login& cancel_url=http://myapp-dev.herokuapp.com? error=access_denied& error_code=200& error_description=Permissions+error& error_reason=user_denied#_=_& display=page
正如你可能已經注意到了
redirect_uri
和cancel_url
域是完全平等的,這個值(http://myapp-dev.herokuapp.com
)在Valid OAuth redirect URIs
列表存在。如果我在這裏手動更改
cancel_url
到生產域,Facebook的錯誤將會消失。如果我完全手動刪除
cancel_url
參數,錯誤也會消失。如果我只是忽略該消息,輸入我的憑據並按登錄按鈕,我將被重定向到
https://www.facebook.com/login.php?login_attempt=1
並且沒有其他事情發生。
思想:
看起來像Facebook根本不檢查
cancel_url
在Valid OAuth redirect URIs
列表存在。已經提到手動黑客顯然是不能接受的普通用戶,所以我呼籲另一個想法。
使用不同的facebook應用程序對應不同的環境也不是一個好主意思想上,恕我直言。
解決方法:
- 作爲@CBRoe在評論中提到:試圖用一個自己的頂級域名,而不是
herokuapp.com
(用它作爲App domains
和Site URL
值)和它的工作。這並沒有解決最初的問題,但是一個很好的解決方法。
您是否嘗試將您的應用程序域和網站URL設置爲「myapp.com」? – CBroe
@CBroe,yep,facebook表示「不允許頂級域名」。 –
@CBroe,其實我的網址全都來自'herokuapp.com'。我試圖使用我自己的頂級域名,而它的工作。謝謝,我會更新這個問題。 –