Facebook画布应用程序“redirect_uri”在授权后突破iframe&认证

时间:2011-09-30 02:05:41

标签: php facebook iframe canvas oauth-2.0

我正在升级我现有的FB应用程序,并试图获得一个简单的PHP iframe画布应用程序来授权和验证(以及使用SSL)。从来没有看过这么多例子......

这就是我被困住的地方:在用户授权应用程序之后,应用程序对用户进行身份验证(我能够使用令牌OK进行图形请求),redirect_uri发生,整个页面刷新,留下Facebook然后我会向我显示我的“Canvas URL”页面(使用我的服务器域名)的内容,而不是ifra上的iframed。

我目前这是一个粗略的两步过程...

这是我的代码在第一页(index.php)上的样子:

<?php
require('src/facebook.php');

$app_id = '123456789';
$app_secret = '1234secrets1234';
$canvas_page = "https://apps.facebook.com/123456789/";
$canvas_url = "https://myserver.com/apptest/";

$code = $_REQUEST['code'];

if(!$code){
$display= 'page';
$scope= 'manage_pages, offline_access, read_insights, publish_stream, user_about_me, user_likes, email'; 
$redirect_url = 'https://myserver.com/apptest/step2.php';
$oauth_url    = 'https://www.facebook.com/dialog/oauth?canvas=1&client_id='.$app_id.'&display='.$display.'&redirect_uri='.urlencode($redirect_url).'&scope='.$scope;
$config = array('appId'  => $app_id,'secret' => $app_secret,'cookie' => true,'domain' => true);
$facebook_client = new Facebook($config);

echo "<script type=\"text/javascript\">top.location.href = \"".$oauth_url."\";</script>";
}
?>

和第二页(step2.php):

<?php
require('src/facebook.php');

$app_id = '123456789';
$app_secret = '1234secrets1234';
$canvas_page = "https://apps.facebook.com/123456789/";
$canvas_url = "https://myserver.com/apptest/";


if($_REQUEST['code']){
$code=$_REQUEST['code'];
$redirect_url = 'https://myserver.com/apptest/step2.php';
$link="https://graph.facebook.com/oauth/access_token?canvas=1&client_id=".$app_id."&redirect_uri=".urlencode($redirect_url)."&client_secret=".$app_secret."&code=".$code;
$string = file_get_contents($link);
$auth_token=substr($string, 13, 150);

$graph_url = "https://graph.facebook.com/me?access_token=".$auth_token;
$user = json_decode(file_get_contents($graph_url));
echo("Hello " . $user->name);
} 

同样,一旦用户授权了应用程序,并且应用程序已对用户进行了身份验证,则图表调用将起作用。

有什么想法吗?

2 个答案:

答案 0 :(得分:6)

导航到OAuth对话框时,网页(不是您应用所在的框架)会导航到OAuth网址。要在身份验证后返回Facebook iframe,您需要将OAuth重定向网址设置为canvas_page网址。上面显示的代码在重定向时导航到myserver的URL,因此您的应用占用了整个页面(因为您在导航到OAuth对话框时离开了Facebook iframe)。 canvas_url上的代码需要确定是从授权(成功还是失败)输入,还是在验证后使用有效的访问令牌输入。

此外,您的canvas_page网址似乎包含facebook apps主机和您的应用ID。它应该是facebook apps主机和您的应用程序名称(重定向URL应该与应用程序开发者页面上的“Canvas Page”URL相同)。

答案 1 :(得分:1)

嗯,我确实让这个工作了。在应用上&gt;设置&gt;基本我没有设置命名空间,所以它给我的Facebook上的应用程序的URL是这样的:https://apps.facebook.com/123456789/现在使用命名空间他们将其更改为:https://apps.facebook.com/myappname。这可能就是这样。我尝试在此页面上仔细遵循简单的PHP自动化演示:https://developers.facebook.com/docs/appsonfacebook/tutorial/它现在似乎正常。

感谢您的帮助!