2011-03-17 2 views
0

Facebook 비즈니스 페이지에 대한 맞춤 iframe/캔버스 페이지 (또는 현재는 '앱'이라고도 함)를 개발 중입니다. 내 목적을 위해, 나는 현재 로그인되어있는 성 (그리고 현재 페이지를 좋아한다)을 사용자에게 가져 와서 페이지에 출력하고 싶습니다. 이 스크립트는 앱 관리자로 로그인 할 때 잘 작동하지만 내 개인 계정 또는 몇 명의 친구 계정으로 로그인하려고하면 $ 세션이 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']; 
?> 

답변

1

불행하게도,이 (reference) 수 없습니다 : 캔버스 페이지와 마찬가지로

, 당신은 사용자까지 signed_request에서 앱에 접근하는 모든 사용자 정보 를받을 수 없습니다 은 앱을 승인합니다.

그래서 먼저 응용 프로그램을 인증하기 위해 사용자가 필요,이 here를 찾을 수 있습니다

<?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"]); 
    } 
?> 

사용자 ID를 응용 프로그램을 승인하고 난 후에, 프로세스가 나는 가정 간단하다.

+0

다른 페이지로 사용자를 리디렉션하지 않고 어떻게 할 수 있습니까? 아마 js 팝업? – Yev

+0

@YevgeniyVanChuchin : 물론 [PHP-SDK 예제] (https://github.com/facebook/php-sdk/blob/master/examples/example.php)에서 fb : login을 확인하십시오. – ifaour