我正在尝试将我的项目与Facebook整合。我一开始就采取了婴儿步骤,只是尝试登录,获得Facebook会话,并获得一些用户数据。我正在本地开发它,所以我的Facebook应用程序设置是:
site URL: http://127.0.0.1:8888/mySite/
画布URL与上面相同。我没有指定网站域名。
但是,当我点击登录按钮时,出现错误:
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.
目前我还没有编写任何服务器端代码来处理重定向等。我所做的就是根据 Facebook for Websites 中的教程添加JavaScript SDK。
我做错了什么?这显然与我的Facebook应用程序设置有关,但我看不到什么!
答案 0 :(得分:88)
<强>更新强>
要回答API错误代码:191
redirect_uri
应与网站网址相同(或相对)
提示:使用基本网址而不是指向特定网页的完整网址。
未推荐:例如,如果您使用www.mydomain.com/fb/test.html
作为网站网址并将www.mydomain.com/fb/secondPage.html
设为redirect_uri
,则会出现191错误。
推荐:请将您的网站网址设置为基本网址,例如:www.mydomain.com/
或www.mydomain.com/fb/
。
今天我浏览了Facebook Python sample application,我感到非常震惊它明确表示您可以使用http://localhost:8080/
作为网站网址你在当地发展:
配置站点URL并指向它 到您的Web服务器。如果你是 在本地开发,你可以使用 http://localhost:8080/
虽然我 确定你不能这样做,但根据我自己的经验(虽然很老的测试),你似乎确实 CAN 在本地测试您的Facebook应用程序!
所以我拿起了我的旧应用程序并编辑了它的名称,Site URL和Canvas URL:
网站网址:http://localhost:80/fblocal/
我下载了最新的Facebook PHP-SDK并将其丢入我的xampp/htdocs/fblocal/
文件夹。
但我和你的错误一样!我注意到XAMPP正在自动重定向到http://localhost/fblocal/
所以我将设置更改为http://localhost/fblocal/
,错误消失了但是我不得不删除应用程序(来自privacy settings)并重新安装我的申请表,结果如下:
之后,请求publish_stream
权限,我能够发布到我的个人资料(使用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;
}
}
结果:
答案 1 :(得分:11)
对我而言,这是一个缺少的应用领域。进入应用程序,确保将您网站的根目录设置为应用程序域。见截图。
答案 2 :(得分:8)
这只是因为网址错误。
无论指定哪个网站网址都应该是正确的。
我提到网站网址为http://localhost:3000/
和domain作为localhost,但在我的浏览器中,我运行http://0.0.0.0:3000/
。
当我以localhost:3000
运行服务器时,它解决了问题。
正如我所提到的,如果我们正在运行,那么作为localhost Facebook的站点URL将重定向到相同的位置
0.0.0.0:3000
,它会引起“应用程序配置不允许给定URL”的错误。
答案 3 :(得分:2)
当我使用facebook身份验证方法时,我也遇到了同样的问题。
但我通过Facebook api(Apps >> My App >> Basic
)中的以下更改纠正了这个问题。
然后我在我的网页上提供了AppId和App Secret。
因此,点击登录按钮,它会要求访问权限,然后将其重定向到网址(有Facebook登录的网站)。
答案 4 :(得分:0)
有同样的问题:
$params = array('redirect_uri' => 'facebook.com/pages/foobar-dev');
$facebook->getLoginUrl($params);
当我将redirect_uri从devloper页面更改为实时页面时,出现了191错误。
所以我删除了$ params:
$facebook->getLoginUrl();
现在应用程序请求后FB重定向到应用程序URL本身f.e。:my.domain.com
我现在做的是检查我的应用程序的index.php,如果我在FB iframe内部。如果不是,我会重定向到实时FB页面:。
$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();
}
答案 5 :(得分:0)
我也注意到即使你指定你的网站在secion下 - 网站有Facebook登录 - &gt;网站网址为例如http://example.com,但如果您的应用域名部分为空,并且您将网站打开为www.example.com,您也会收到此错误。要避免在“App Domains”部分编写example.com,这将允许子域名,例如www.example.com,something.example.com等
答案 6 :(得分:0)
在Facebook App页面中,转到基本选项卡。找到“有Facebook登录的网站”选项。
您会在其中找到网址:输入完整的网址(例如http://Mywebsite.com/MyLogin.aspx)。这是您可以使用的URL,如果APP ID是123456789
答案 7 :(得分:0)
我想添加的内容,因为这是关于谷歌的第一个问题:
当重定向到Facebook而不是您自己的网站以获取已签名的请求时,如果用户安全浏览并且您的应用确实重定向到没有SSL的Facebook,则可能会遇到此错误。
答案 8 :(得分:0)
在当地工作...... 我无法使feed api工作,但是共享api几乎没有任何问题。
答案 9 :(得分:0)
我通过将重定向网址传递给我的回调函数中的FacebookRedirectLoginHelper::getAccessToken()
来解决此问题:
从
改变try {
$accessToken = $helper->getAccessToken();
}
...
到
try {
$accessToken = $helper->getAccessToken($fbRedirectUrl);
}
...
我正在开发一个流浪盒,似乎FacebookRedirectLoginHelper::getCurrentUrl()
在生成有效网址时出现问题。
答案 10 :(得分:0)