2012-12-12 29 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不熟悉,所以我不知道如何设置它,或者如果可能的话。

相关问题