2015-06-18 78 views
2

初始設置Facebook並沒有查找在列表中「cancel_url」,「有效的OAuth重定向的URI」

我的應用程序使用Facebook的OAuth的體系,並擁有3個不同的環境:生產,測試和開發。我已經列出了Facebook應用程序的高級設置中的所有3頁有效重定向的URL(喜歡的人做herehere):

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 

目前爲止

  1. 使用生產環境時,一切正常。

  2. 當測試或開發(兩者並不位於App domainsSite 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. 
    

更多細節關於後一種情況:

  1. 當前瀏覽器中的當前URL是(並非完全相同,爲了清晰起見,我解碼了nextcancel_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 
    
  2. 正如你可能已經注意到了redirect_uricancel_url域是完全平等的,這個值(http://myapp-dev.herokuapp.com)在Valid OAuth redirect URIs列表存在。

  3. 如果我在這裏手動更改cancel_url到生產域,Facebook的錯誤將會消失。

  4. 如果我完全手動刪除cancel_url參數,錯誤也會消失。

  5. 如果我只是忽略該消息,輸入我的憑據並按登錄按鈕,我將被重定向到https://www.facebook.com/login.php?login_attempt=1並且沒有其他事情發生。


思想

  1. 看起來像Facebook根本不檢查cancel_urlValid OAuth redirect URIs列表存在。

  2. 已經提到手動黑客顯然是不能接受的普通用戶,所以我呼籲另一個想法。

  3. 使用不同的facebook應用程序對應不同的環境也不是一個好主意思想上,恕我直言。


解決方法

  1. 作爲@CBRoe在評論中提到:試圖用一個自己的頂級域名,而不是herokuapp.com(用它作爲App domainsSite URL值)和它的工作。這並沒有解決最初的問題,但是一個很好的解決方法。
+2

您是否嘗試將您的應用程序域和網站URL設置爲「myapp.com」? – CBroe

+0

@CBroe,yep,facebook表示「不允許頂級域名」。 –

+0

@CBroe,其實我的網址全都來自'herokuapp.com'。我試圖使用我自己的頂級域名,而它的工作。謝謝,我會更新這個問題。 –

回答

2

看來,Facebook應用程序域可以在一個子域 - Facebook不檢查它存在,它只是尋找頂級域,這允許我們設置一個假子域。並允許我們在假子域上託管我們的本地開發環境。

如果您或您的客戶沒有實時頂級域名,則這不起作用。

編輯您的主機文件/ etc/Mac和/窗/ SYSTEM32 /司機/ etc/hosts文件在Windows主機

192.168.10.10 dev.theclientsdomain.com

然後把dev.theclientsdomain.com進入應用程序域。

希望有幫助。

相關問題