Приложение Facebook canvas "перенаправление uri" выходит из iframe после авторизации и аутентификации


Я обновляю свои существующие приложения FB и совершенно схожу с ума, пытаясь получить простое приложение PHP iframe canvas для авторизации и аутентификации (а также использования SSL). Никогда не просматривал столько примеров...

Вот где я застрял: после того, как пользователь авторизует приложение, и приложение аутентифицирует пользователя (я могу сделать запрос графика с помощью токена OK), происходит перенаправление_uri, и вся страница обновляется, покидая Facebook, а затем просто показывает мне содержимое моего "Холста Страница "URL" (с доменом моего сервера), а не в рамке на Facebook.

В настоящее время у меня это грубый двухэтапный процесс...

Вот как выглядит мой код на первой странице (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);
} 

Опять же, как только пользователь авторизовал приложение и приложение аутентифицировало пользователя, вызов графика работает.

Есть идеи?

Author: jonkeegan, 2011-09-30

2 answers

При переходе в диалоговое окно OAuth веб-страница (а не фрейм, в котором находится ваше приложение) переходит по URL-адресу OAuth. Чтобы вернуться в iframe Facebook после аутентификации, вам необходимо установить URL-адрес перенаправления OAuth на URL-адрес canvas_page. Код, показанный выше, переходит по URL-адресу myserver при перенаправлении, поэтому ваше приложение занимает всю страницу (потому что вы покинули iframe Facebook при переходе к диалоговому окну OAuth). Ваш код в canvas_url должен определить, вводится ли он от авторизации (успешной или неудачной) или если она вводится с действительным маркером доступа после аутентификации.

Кроме того, ваш URL-адрес canvas_page, по-видимому, состоит из хоста приложений facebook и вашего идентификатора приложения. Это должен быть хост приложений facebook и имя вашего приложения (URL-адрес перенаправления должен совпадать с URL-адресом "Страницы холста" на странице разработчика вашего приложения).

 6
Author: , 2011-09-30 12:56:37

Что ж, у меня это получилось. В приложении > настройки > основные я не установил пространство имен, поэтому URL-адрес, который он дал мне для приложения на facebook, был таким: https://apps.facebook.com/123456789 / и теперь с пространством имен они изменили его на:https://apps.facebook.com/myappname . Так что, возможно, так оно и было. Я старался внимательно следить за простой демонстрацией авторизации PHP на этой странице: https://developers.facebook.com/docs/appsonfacebook/tutorial / и, кажется, все работает нормально сейчас.

Спасибо за помощь!

 1
Author: jonkeegan, 2011-09-30 18:05:03