0

제대로 로그인하고 앱을 인증하는 facebook iframe 앱이 있지만 getUser()는 첫 번째 페이지에서만 작동합니다. 사용자가 iframe 내에서 새 페이지로 연결되는 링크를 클릭하면 getUser()는 0을 반환합니다.facebook iframe 앱; php sdk getUser()는 페이지 1에서 유효한 ID를 반환하지만 다른 페이지에서는 그렇지 않습니다.

이 코드가 다른 앱에서 작동하는 것은 이상합니다. 원하는 모든 클릭을하고 getUser) 유효한 ID를 반환합니다. https://apps.facebook.com/celestial_glory/

않는 한 (같은 코드베이스) : https://apps.facebook.com/uprisingstlouis/

여기에 내가 사용하고있는 코드입니다 :

require_once ('fb/facebook.php'); 

// snip... set $app_id, $secret, and $canvas_page 

// first, try normal facebook getUser(). If that works, awesome. 

$facebook = new Facebook(array(
    'appId' => $app_id, 
    'secret' => $secret, 
)); 

$signed_request = $_REQUEST['signed_request']; 

// Get User ID 
$user = $facebook->getUser(); 
if ($user != '0') return 'fb=' . $user; // works once 

// getUser() didn't work. Try oAuth. Maybe user needs to log in or 
// authorize the game? 

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

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

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

if (empty($data["user_id"])) { 
    echo '<a target="_top" href="' . $auth_url . '">Login to Facebook</a>'; 
    exit; 
// normally we would auto-redirect, but with a uid of 0, this just auto-redirects 
// echo("<script> top.location.href='" . $auth_url . "'</script>"); 
} else { 
    return 'fb=' . $data['user_id']; 
} 

어떤 아이디어가 작동하지 않습니다

응용? 나는 앱 ID와 비밀 및 캔버스 페이지를 세 번 확인했습니다. 그것들이 틀렸다면, 첫 번째 페이지조차도 작동하지 않을 것으로 기대합니다. 이 (캔버스 페이지 URL에 페이스 북이 POST'ed) signed_request에서 사용자를 얻을 수 있기 때문에 첫 페이지에

$facebook = new Facebook(array(
    'appId' => $app_id, 
    'secret' => $secret, 
    'cookie' => true // this! 
)); 

getUser 작품 :에

답변

0

변경 페이스 북 PHP-SDK 초기화. 따라서 사용자가 애플리케이션 내에서 더 깊숙이 탐색을 시작하면 사용자를 추적 할 방법이 필요합니다. 어쨌든 signed_request을 모두 직접 전달하거나 위에서 제안한 PHP-SDK 쿠키 지원 기능을 간단히 활성화 할 수 있습니다.

+0

시도해 보았습니다. - 변경 없음 8 - (((getUser()는 여전히 첫 번째 페이지에는 유효한 정보를 반환하지만 그 이상은 0을 반환합니다. –