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 )的变化。

  1. 我删除了我在===> Facebook上的应用 (Canvas URL)
  2. 我只在===> 网站与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

https://graph.facebook.com/oauth/authorize?client_id=123456789&redirect_uri=http://Mywebsite/MyLogin.aspx&scope=publish_actions

我想添加的东西,因为这是谷歌的错误191第一个问题:

当redirect到Facebook而不是您自己的网站以获得已签名的请求时,如果用户安全浏览并且您的应用没有SSLredirect到Facebook,则可能会遇到此错误。

在本地工作…我无法让feed api工作,但share api几乎可以直接运行,没有任何问题。