2012-01-18 1 views
0

나는 $ user = $ facebook-> getUser()를 이해하지 못하기 때문에; 함수 (사용자가 로그인 한 경우에도 NULL을 반환합니다 ...)이 코드를 사용하여 노력하고있어. 문제는 "현재 사용자에 대한 정보를 쿼리하는 데 활성 액세스 토큰을 사용해야합니다."라는 내용입니다. OAuthException 그리고 만약 내가 로그를 리디렉션 코드를 잡아라 섹션에 그것은 끝없는 리디렉션 루프에 도착 ... 누군가가 나를 도울 수 있습니까?페이스 북 PHP SDK : api ('/ me') 이상한 행동

감사합니다. :)

try { 
    $user_profile = $facebook->api('/me'); 
    $scope = 'publish_stream,user_photos'; 

    $scope_params = explode(',',$scope); 

    $permissions = $facebook->api("/me/permissions"); 

if(array_key_exists('publish_stream', $permissions['data'][0]) && array_key_exists('user_photos', $permissions['data'][0])) { 
    // facebook logic 
}else { 
    ?> 
    <!doctype html> 
     <html xmlns:fb="http://www.facebook.com/2008/fbml"> 
     <head> 
     <title>Redirect</title> 
     <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> 

     <script language=javascript>window.open('<?php echo $loginUrl ?>', '_parent', '')</script> 
     </head> 
     <body> 
     Redirecting... 
     </body> 
    </html> 

     <?php 
    exit; 
     } 

}catch (FacebookApiException $e) { 
    echo '<pre>'.htmlspecialchars(print_r($e, true)).'</pre>'; 
} 
+0

페이스 북에 문제가있어서 사용자를 인증 한 후 리디렉션을 포함 할 때마다 사용자를 인증하려고한다는 것을 기억합니다. 헤더 ('P3P : CP = "CAO PSA OUR"'); ' – Nightwolf

+0

이 코드를 정확히 어디에 추가해야합니까? (만약 내가 맞다면이 헤더 수정은 IE 리디렉션 루프를위한 것입니다, 지금은 FireFox입니다.) – VORiAND

+0

이것은 헤더이므로 모든 출력이 시작되기 전에 모든 페이지에 있어야합니다. 인증이나 변수를 잃어 버리지 않아야합니다. – Nightwolf

답변

0

솔루션은 하나 개의 index.php 파일에 모든 코드를 넣어했다

루프는 다음과 같이 발생
0

그래프 API에 액티브 액세스 토큰을 전달해야합니다. 모든 액세스 토큰에는 만료 시간이 있으며 통과 한 후에는 다시 인증해야합니다. 페이스 북의 PHP SDK ($facebook->getAccessToken();)에서 액세스 토큰이 있는지 확인해야합니다. 그것이 없으면 자신을 다시 인증하십시오. ID가 도움이되지 않는다면 다른 새로운 Facebook 응용 프로그램을 사용해보십시오. 전체 인증은 여기에 설명되어 있습니다 : http://developers.facebook.com/docs/authentication/

위의 링크에서 PHP SDK 토큰을 사용하지 않고 직접 액세스 권한을 얻는 방법에 대해 설명합니다.

+0

JS 스크립트를 리다이렉트 (catch) 섹션으로 옮기면 여전히 무한 루프가됩니다 ...하지만이 앱이 자동으로 실행되고 권한도 요청할 것이라고 생각합니다. ( – VORiAND

+0

흠 ... 나는 생각하지 않습니다. 이 온라인 소스 코드를 링크 할 수 있습니까? – VORiAND

+0

죄송합니다. 실수로 이전 설명을 삭제했습니다. 코드에서 : {echo $ facebook-> getAccessToken(); exit(); } 출력을보십시오. –

0

:

  1. 통화 API
  2. API는 잘못된 토큰/만료
  3. GetLoginUrl는) (말한다 -> redirect
  4. oauth 페이지로 리디렉션되면 사용 권한과 토큰이 여전히 유효하다고 간주됩니다. 그래서 앱에 다시 리디렉션
  5. 루프가 발생

이 토큰이 만료 시간 사이에 지연 또는 사용자가 응용 프로그램과의 OAuth 스크립트가 실제로 최대 따기 deauthorises 보인다 (다시 1 단계) 변화.

버그?