php - Facebook Canvas 应用程序 "redirect_uri"在授权和身份验证后跳出 iframe

标签 php facebook iframe canvas oauth-2.0

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

这是我卡住的地方:在用户授权应用程序并且应用程序对用户进行身份验证后(我能够使用 token OK 发出图形请求),redirect_uri 发生,整个页面刷新,离开 Facebook然后只显示我的“Canvas URL”页面(带有我的服务器域)的内容,而不是 Facebook 上的 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);
} 

同样,一旦用户授权了应用程序,并且应用程序对用户进行了身份验证,图形调用就会起作用。

有什么想法吗?

最佳答案

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

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

关于php - Facebook Canvas 应用程序 "redirect_uri"在授权和身份验证后跳出 iframe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7605265/

相关文章:

php - 用德语变音符号生成 slug

php - 有条件地更新列 PHP/MySQL

php - 如何使用类型开关更改 PrestaShop 1.7 表单中的 css

Facebook AR Studio - 导入动画

javascript - HTML5 框架 : Block remote requests

php - 提取网址的最后一部分

php - 在 xampp 等本地服务器上设置和测试 facebook 连接

ruby-on-rails - omn​​iauth - 有什么理由我应该将 OAuth2 token 存储在数据库中?

html - 覆盖 iframe 宽度的 CSS 属性

javascript - 可见时加载 iframe