2012-12-12 67 views
5

我在我的專用網絡(IP範圍192.168.0.0192.168.255.255)內的計算機上運行了一個開發服務器(Java servlet容器)。此開發服務器執行我的集成測試環境。這個測試環境擁有自己的Facebook應用程序ID。具有服務器運行在192.168.x.y範圍允許我的同事測試的網站,登錄到我的地方網站與他們的Facebook賬戶等。Facebook應用程序:允許單個Facebook應用程序在任意專用網絡地址上運行

https://developers.facebook.com - >在Facebook應用程序設置 - >位於「基本設置」 - >在「使用Facebook登錄的網站」字段中,我設置了http://192.168.2.106:8080,因爲這是我的開發服務器綁定的地址端口組合。

由於DHCP,我的電腦現在有一個稍微不同的IP地址,即192.168.2.109。每當我開始了我的服務器,然後嘗試做任何事情的Facebook的API相關的(比如Facebook登錄),我收到來自Facebook

{ 
    "error": { 
     "message": "Invalid redirect_uri: Given URL is not allowed by the Application configuration.", 
     "type": "OAuthException", 
     "code": 191 
    } 
} 

以下錯誤消息是有辦法有一個Facebook應用程序允許「範圍用Facebook登錄的IP地址網站「?你可以建議什麼其他解決方案?

我的同事也可以在自己的機器上啓動開發服務器,並擁有自己的專用網絡地址。因此,相同的Facebook應用程序ID可以在具有不同IP地址的不同機器上工作,並且仍然可以在專用網絡內的每個人員上訪問。

請注意,將「使用Facebook登錄的網站」設置爲localhost會使開發服務器僅對運行它的同一臺計算機可用。這不幸的是阻止了同事訪問這個開發服務器實例。

更新

提交BUG:https://developers.facebook.com/bugs/606277079382609

+0

爲什麼不在您的DCHP服務器上設置靜態租約? – Igy

+0

請將您的附加約束添加到問題中。 – user314104

回答

1

如果你在Windows上運行,你可以嘗試改變你的主機文件在C:\ WINDOWS \ SYSTEM32 \ drivers \ etc下 和您的IP地址添加到一個假想域名(你的同事也應該這樣做)並將該域名置於Facebook設置面板中。 我不知道這個,所以告訴我,如果它的工作:)

+0

感謝您的解決方案。我想通過它。更改我私人網絡中每個同事計算機上的主機文件是不實際/可能的(例如,有Android客戶端)。另外,就我所知,Window的主機文件語法不支持IP地址通配符。所以當服務器IP發生變化時(例如,由於DHCP,或者服務器在不同的機器上運行),我需要更新每臺機器上的hosts文件。 – Abdull

1

據我所知,你不能在你的應用程序設置中設置IP範圍,redirect_uri通常意味着處理具有域名的URL,這是通常是與公共網站的情況。

避免此問題的最佳方法是確保本地開發服務器始終獲得相同的IP,如果您正在編寫服務器,這通常是一種很好的做法。 有幾個方面,這取決於網絡設置做的,這裏有兩個選項:

  1. 設置DHCP服務器相同的IP總是分配給您的開發服務器的MAC地址
  2. 通融一點並設置您的計算機以聲明未使用的IP地址。 DHCP服務器通常按順序分配IP(將從192.168.1.1開始並工作到192.168.254.254),這樣您的計算機就可以在該範圍的較高部分聲明一個IP(首先Ping IP,以確保它不被使用)
+1

以下是我面臨的挑戰/限制:任何開發人員都必須能夠在任何網絡環境下在自己的OWN筆記本電腦上啓動Web應用程序:在工作場所,在家中,在商業夥伴的外國網絡上。尤其是國外的網絡使用案例使得不可能依靠不斷變化的IP。而「每個開發人員可以啓動Web應用程序」用例使得不可能只有一個IP /一箇中央開發服務器。 – Abdull

1

不使用IP地址,而使用localhost。

所以hxxp://192.168.1.20將成爲hxxp://本地主機

(更換TT XX)

這解決回本地機器,無論其IP地址。我假設你的開發服務器正在你的電腦上運行,使用WAMP或類似的東西。我繪製這個假設是因爲您聲明它必須在任何網絡環境中的任何筆記本電腦上運行。

+0

在本地主機上運行開發服務器使同事無法訪問此服務器(?)。同事應能夠訪問服務器以使用其Facebook帳戶登錄並在網站上進行測試/播放。 – Abdull

+0

所以只有一個開發服務器,但你希望人們能夠從任何地方訪問它?如果是這樣的話,那麼你將無法使用本地尋址,因爲如果一個同事在不同的網絡上,它將擁有自己的本地網絡。關於本地尋址(192.168,10.0等)的要點是所有網絡都可以擁有自己的一個。那麼你是說你想讓任何網絡的開發人員能夠訪問你的開發者服務器?如果是這種情況,您需要使用網絡的外部IP地址,並分配特定的端口,然後將該端口轉發到您的開發服務器。 – Puzbie

1

如果你擁有一個域名,你可以創建一個子域test.mydomain.com指向192.168.2.109。

當您的地址應該再次更改時,您可以相應地更改條目。

沒有理由爲什麼一個DNS條目無法從192.168範圍指向一個IP地址。對於你網絡之外的人來說,它不會很有用,因爲他無法從外部訪問你的IP地址,但對於你的網絡內的同事來說,它將起作用。

如果一個同事要經營自己的PC上的Web應用程序,他當然可以用自己的hosts文件覆蓋此設置。

3

如果你可以擺脫使用本地主機,那麼有一個非常簡單的方法: 使Facebook應用重定向到http://lvh.me:3000/(或服務器在本地主機上偵聽的任何端口)。一位仁慈的開發人員擁有lvh.me域名,並將DNS設置指向本地主機。我試過這個,這就是我用於開發測試的東西。 同樣,您可以做類似的事情,並指出您擁有的域名的DNS記錄到一系列本地IP。我對DNS不熟悉,所以我不知道如何設置它,或者如果可能的話。

相關問題