Аутентификация приложения Facebook в фрейме? - PullRequest
4 голосов
/ 13 января 2011

Я разработал приложение для Facebook, которое работает внутри iframe на холсте Facebook. Для правильной работы я запрашиваю расширенные разрешения у пользователя. Если пользователь не авторизовал приложение, я отправляю его на страницу входа с помощью метода getLoginUrl () в PHP SDK.

Работает, но не красиво. Метод отправляет пользователя на целевую страницу перед страницей аутентификации. Это выглядит так:

Facebook Landing Page

Когда я нажимаю «Перейти на Facebook.com», я вижу фактическую страницу с запросами на разрешение (я также получаю право на страницу с разрешениями, если я распечатываю URL-адрес, копирую его и вводю в новом окне браузера). Как заставить Facebook пропустить этот шаг, когда я делаю перенаправление из Iframe?

Мой код выглядит следующим образом (с использованием CodeIgniter и Facebook PHP SDK):

$this->facebook = new Facebook(array(
  'appId'  => '{MY_APP_ID}',
  'secret' => '{MY_SECRET}',
  'cookie' => TRUE,
  'domain' => $_SERVER['SERVER_NAME']
));

$this->facebook->getSession();

try {
  $this->me = $this->facebook->api('/me');
}
catch (FacebookApiException $e) {
  $this->me = NULL;
}

if ( is_null($this->me) ) {
  redirect($this->facebook->getLoginUrl(array(
    'req_perms' => 'offline_access,read_stream,publish_stream,user_photos,user_videos,read_friendlists',
    'next' => $this->config->item('base_url').'fblogin.php?redirect_uri='.$this->uri->uri_string()
  )));
}

Ответы [ 2 ]

4 голосов
/ 13 января 2011

Я думаю, вам нужно перенаправить родительский фрейм (т. Е. _Top), а не сам iFrame?

0 голосов
/ 14 января 2011

То, как я это делаю, настраивает файл INDEX.PHP со следующим

    //if user is logged in and session is valid.
    if ($fbme){
        //fql query example using legacy method call and passing

параметр пытаться{ $ fql = "выберите имя, родной город_расположение, пол, pic_square от пользователя where uid = ". $ UID; $ param = array ( 'method' => 'fql.query', 'query' => $ fql, 'callback' => 'http://apps.facebook.com/yoursite/' ); $ fqlResult = $ facebook-> api ($ param); } catch (исключение $ o) { д ($ о); } }

Затем укажите URL вашего холста на http://yoursite.com/INDEX.php

URL обратного вызова в вышеприведенном коде, который будет находиться в INDEX.PHP, устанавливает, где присматривать за разрешениями.

FBMain.php выглядит так

//set application urls here
$fbconfig['http://www.yoursite.com/iframeapp/YOURMAINPAGE.php/']

= "http://www.tyoursite.com/YOURMAINPAGE.php/";

$fbconfig['http://apps.facebook.com/CANVASBASEURL']

= "http://apps.facebook.com/CANVASBASEURL";

<code>$uid            =   null; //facebook user id

try{
    include_once "facebook.php";
}
catch(Exception $o){
    echo '<pre>';
    print_r($o);
    echo '
'; } // Создать наш экземпляр приложения. $ facebook = новый Facebook (массив ( 'appId' => $ fbconfig ['APPID'], 'secret' => $ fbconfig ['SECRET'], 'cookie' => правда, )); // Аутентификация в Facebook $ session = $ facebook-> getSession (); $ loginUrl = $ facebook-> getLoginUrl ( массив ( 'canvas' => 1, 'fbconnect' => 0, 'Req_perms' => 'электронная почта, publish_stream, status_update, user_birthday, USER_LOCATION' ) ); $ fbme = null; if (! $ session) { echo " top.location.href

= '$ loginUrl'; "; выход; } еще { пытаться { $ uid = $ facebook-> getUser (); $ fbme = $ facebook-> api ('/ me');

    } catch (FacebookApiException $e) {
        echo "<script type='text/javascript'>top.location.href

= '$ loginUrl'; "; выход; } }

<code>function d($d){
    echo '<pre>';
    print_r($d);
    echo '
'; }?>

Надеюсь, это немного яснее. Мне потребовалось время, чтобы понять это, но я добрался туда, подумал, что помогу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...