Facebook API错误191
我正在尝试将我的项目与Facebook整合。 我刚开始采取小步骤,只是试图login,获得一个Facebook会话,并获得一些用户数据。 我在本地开发它,所以我的Facebook应用程序设置是:
site URL: http://127.0.0.1:8888/mySite/
canvasurl与上述相同。 我没有指定一个网站域名。
但是,当我点击loginbutton,我得到一个错误:
API Error Code: 191 API Error Description: The specified URL is not owned by the application Error Message: redirect_uri is not owned by the application.
目前我还没有编写任何服务器端代码来处理redirect等,我所做的只是添加基于Facebook教程的JavaScript SDK的网站 。
我做错了什么? 这显然是我的Facebook应用程序设置,但我看不到什么!
更新:
要回答API错误代码:191
redirect_uri
应该与站点URL相同(或相对)。
提示:使用基本url而不是指向特定网页的完整url。
不推荐:例如,如果您使用www.mydomain.com/fb/test.html
作为您的站点URL并将www.mydomain.com/fb/secondPage.html
设为redirect_uri
则会出现191错误。
build议:相反,请将您的网站url设置为基本url,例如: www.mydomain.com/
或www.mydomain.com/fb/
。
我今天浏览了Facebook的Python样本应用程序 ,当我在本地进行开发时,我感到非常震惊的是,您可以使用http://localhost:8080/
as Site URL :
configuration网站URL,并将其指向您的Web服务器。 如果您正在本地开发,则可以使用http:// localhost:8080 /
虽然我确信你不能这样做,根据我自己的经验(尽pipe很老的testing),似乎你实际上可以在本地testing你的Facebook应用程序!
所以我拿起我的旧应用程序,并编辑它的名称,网站的URL和帆布的URL:网站的URL: http://localhost:80/fblocal/
我下载了最新的Facebook PHP-SDK,并把它放到我的xampp/htdocs/fblocal/
文件夹中。
但是我得到了和你一样的错误! 我注意到XAMPP正在对http://localhost/fblocal/
进行自动redirect,所以我将设置改为http://localhost/fblocal/
,错误消失了, 但是我必须删除应用程序(从隐私设置中 )并重新安装我的应用程序,这里是结果:
之后,请求publish_stream
权限,并且能够发布到我的configuration文件(使用PHP-SDK):
$user = $facebook->getUser(); if ($user) { try { $post = $facebook->api('/me/feed', 'post', array('message'=>'Hello World, from localhost!')); } catch (FacebookApiException $e) { error_log($e); $user = null; } }
结果:
对我而言,这是一个缺less的应用程序域。 进入应用程序,并确保您的网站根目录设置为应用程序域。 看截图。
这只是因为URL错误。
无论指定哪个网站url都应该是正确的。
我提到网站URL为http://localhost:3000/
和域名为localhost,但在我的浏览器中运行http://0.0.0.0:3000/
。
当我运行服务器localhost:3000
它解决了这个问题。
正如我所提到的,作为localhost Facebook的站点URL将redirect到相同的,如果我们运行的是0.0.0.0:3000
,则会出现“给定URL不被应用程序configuration允许”的错误。
当我使用Facebook身份validation方法时,我也面临同样的问题。 但我纠正了这个问题,在Facebook的API( Apps >> My App >> Basic
)的变化。
- 我删除了我在===> Facebook上的应用 (Canvas URL)
- 我只在===> 网站与Facebooklogin选项网站的url
然后我在我的网页上给了AppId和App Secret。
所以通过点击loginbutton,它要求访问权限,然后redirect到给url( 网站与Facebooklogin )。
有同样的问题:
$params = array('redirect_uri' => 'facebook.com/pages/foobar-dev'); $facebook->getLoginUrl($params);
当我将redirect_uri从devloper页面更改为live页面时,出现了191错误。
所以我删除了$ params:
$facebook->getLoginUrl();
在应用程序请求现在FBredirect到应用程序url本身fe:my.domain.com
我现在要做的是检查我的应用程序的index.php,如果我在FB内部框架或不。 如果不是,我将redirect到活页面fe:
$app = 'facebook.com/pages/foobar-live'; $rd = (isset($_SERVER['HTTP_REFERER'])) ? parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST) : false; if ($rd == 'apps.facebook.com' || (!isset($_REQUEST['signed_request']))) { echo '<script>window.parent.location = "'.$app.'";</script>'; die(); }
我也注意到,即使你指定你的网站secion – 网站与Facebook的login – >网站的url如http://example.com ,但如果你的应用程序域部分是空的,并打开网站为www.example。你也会得到这个错误。 要避免在“应用程序域”部分编写example.com,这将允许子域名,如www.example.com,something.example.com等
在Facebook的应用页面,转到基本选项卡。 find“与Facebooklogin网站”选项。
你会发现网站URL:input那里把完整的URL(例如http://Mywebsite.com/MyLogin.aspx )。 这是你可以使用的URL如果应用程序ID是123456789的URL
我想添加的东西,因为这是谷歌的错误191第一个问题:
当redirect到Facebook而不是您自己的网站以获得已签名的请求时,如果用户安全浏览并且您的应用没有SSLredirect到Facebook,则可能会遇到此错误。
在本地工作…我无法让feed api工作,但share api几乎可以直接运行,没有任何问题。