$facebook-›getSession() на странице Facebook iframe приложение/вкладка работает только тогда, когда администратор приложения вошел в систему

Я разрабатываю некоторые пользовательские страницы iframe/canvas (или теперь известные как «приложения») для бизнес-страницы Facebook. Для моих целей я хотел бы получить имя и фамилию пользователей, которые в настоящее время вошли в систему (и которым в настоящее время нравится страница), и вывести их на страницу. Этот скрипт отлично работает, когда я вхожу в систему как администратор приложения, но когда я пытаюсь войти в систему как свою личную учетную запись или пару учетных записей моих друзей - кажется, что $session имеет значение null. Почему это происходит и как получить имя и фамилию без дополнительной аутентификации пользователя?

<?php
require_once '../db/connect.php';
require_once '../../lib/facebook.php';
$signed_request = $_REQUEST["signed_request"];
$secret = "***********************************";
$facebook = new Facebook(array(
    'appId'  => '**************',
    'secret' => $secret,
    'cookie' => true
));
$session = $facebook->getSession();
$me = null;
// Session based API call.
if ($session) {
    echo "\$session is not null!";
    try {
        $uid = $facebook->getUser();
        $me = $facebook->api('/me');
    } catch (FacebookApiException $e) {
        error_log($e);
    }
}
echo $me['name'];
?>

person Yev    schedule 17.03.2011    source источник


Ответы (1)


К сожалению, это невозможно (ссылка):

Как и в случае со страницей холста, вы не получите всю информацию о пользователе, доступную для вашего приложения, в signed_request, пока пользователь не авторизует ваше приложение.

Таким образом, вам нужно, чтобы пользователь сначала авторизовал ваше приложение, это можно найти здесь :

 <?php 

     $app_id = YOUR_APP_ID;

     $canvas_page = YOUR_CANVAS_PAGE_URL;

     $auth_url = "http://www.facebook.com/dialog/oauth?client_id=" 
            . $app_id . "&redirect_uri=" . urlencode($canvas_page);

     $signed_request = $_REQUEST["signed_request"];

     list($encoded_sig, $payload) = explode('.', $signed_request, 2); 

     $data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true);

     if (empty($data["user_id"])) {
            echo("<script> top.location.href='" . $auth_url . "'</script>");
     } else {
            echo ("Welcome User: " . $data["user_id"]);
     } 
 ?>

Я полагаю, что после авторизации вашего приложения и получения идентификатора пользователя процесс тривиален.

person ifaour    schedule 17.03.2011
comment
Любая идея, как я могу это сделать, не перенаправляя пользователя на другую страницу? Возможно, всплывающее окно js? - person Yev; 17.03.2011
comment
@YevgeniyVanChuchin: Конечно, проверьте fb:login в PHP -Пример SDK - person ifaour; 18.03.2011