2011-12-23 2 views
0

얼마 전에 페이스 북에 가입 한 사람들을 어떻게 처리해야합니까? 귀하의 사이트로 오십시오. 계속 링크해야합니다 (페이스 북에 이미 로그인되어 있음을 감지했기 때문에). 그런 다음 페이지로 이동하면이 오류가 나타납니다.페이스 북 PHP SDK - OAuthException - OAuth2

Fatal error: Uncaught OAuthException: An active access token must be used to query information about the current user. thrown in /var/www/html/lib/base_facebook.php on line 1039

당신이를 방지하기 위해 해야하는 방법을 이해하지? 이것은 access_token을 얻기 위해 Facebook에 돌려주는 서명 된 정보와 관련이 있습니까? 서명 된 정보가 만료 될 수있는 것 같습니다 (발행 된 날짜가 있음). 웹 사이트의 흐름에서이를 처리하는 올바른 방법은 무엇입니까?

는이 같은 코드를 작성 할 것으로 예상된다 :

이 대신
<?php 
$user = $facebook->getUser(); 
try { 
    // attempt to do a call just to see if you are going to have this issue 
    $profile = $facebook->api('/me'); 
} catch (Exception $e) { 
    $user = false; 
} 
if ($user) { ?> 
    <a href="start.php">Begin</a> 
<?php } else { ?> 
    <fb:login-button scope="email" size="large">Connect</fb:login-button> 
<?php } ?> 

:

<?php 
$user = $facebook->getUser(); 
if ($user) { ?> 
    <a href="start.php">Begin</a> 
<?php } else { ?> 
    <fb:login-button scope="email" size="large">Connect</fb:login-button> 
<?php } ?> 

를 다시 페이스 북 SDK에서 $ 사용자를 얻기 만 쿠키가 당신에게 말할 것 같다. API 호출을 할 때 실제로 작동하는지는 알 수 없습니다.

UPDATE : 사용자가 내 사이트에 쿠키를 가지고 있지만, API 호출이 실패 할 때 그래서이 방법 내 유일한 문제는 ...이다 - 내가 그들을 연결 버튼을 보여줍니다. 사용자가 연결 버튼을 클릭하면 빠르게 나타나고 사라집니다. 방금 발생한 'auth.login'이 아니기 때문에 사용자는 JavaScript 리디렉션을 통해 start.php 페이지로 전송되지 않습니다. 어떻게 다른 사람들이 이것을 처리합니까? 나는 혼란 스럽다. 어떻게해야하는지 다른 결함이 있는지 말해주세요.

+0

당신은 도메인 이름, APP_ID 및 app_secret가 (당신이 FB 사용자를 확인하는 사람이 존재하고 리디렉션되는 하나) 두 사이트에서 동일한 지 확인해 봤어? 그리고 첫 번째 사이트에서 페이스 북 개체를 초기화하는 데 사용 된 도메인은 다음 사이트에서 높은 수준의 도메인이어야합니다. –

+0

이것은 모두 같은 사이트에 있습니다. 로그인 성공 후/(또는 index.php)에서 내 사용자를 start.php로 리디렉션하고 싶습니다. – BuddyJoe

답변

0

는이 같은 코드를 작성 할 것으로 예상된다 :

예, 당신은 OAuthException 처리해야합니다.

FBML 로그인 버튼을 사용하는 대신 사용자를 애플리케이션의 Facebook 로그인 URL로 리디렉션 할 수 있습니다. Facebook PHP SDK에서 제공하는 getLoginUrl 함수를 사용하여 URL을 얻을 수 있습니다. 자세한 내용은 getLoginUrl을 참조하십시오. 당신이 배열를 사용할 수 있습니다 귀하의 이메일 권한에 대한

:

$params = array('scope' => 'email'); 

일단 성공적으로 사용자는 다시 페이스 북 로그인 그를 리디렉션 응용 프로그램 페이지로 리디렉션됩니다, 로그인.

+0

내가 물어 봅시다 ... 로그인에 이것을 통합하는 것이 일반적입니까? facebook 로그인이 오래되지 않았다면 (즉, 하루 종일 Facebook에 로그인 한 상태로 유지) Javascript SDK를 사용하여 강제로 로그 아웃하고 다시 로그인하십시오 (http : // stackoverflow).com/questions/2764436/facebook-oauth-logout – BuddyJoe

+0

사용자를 getLoginUrl로 리디렉션한다고해서 페이스 북에서 로그 아웃되는 것은 아닙니다. 즉, 사용자의 상태를 알 수 없으며 facebbok으로 확인하고 싶다는 뜻입니다. AFA 로그인 한 사용자에 대한 액세스 토큰이 없다는 것을 알고 있습니다. 즉, 앱에 사용자의 '정보'를 쿼리 할 수있는 권한이 없습니다. 쿼리에 대한 액세스 토큰을 얻었 으면 좋을 것입니다. 그러나 당신은 그렇지 않았습니다. 즉, 권한이 부족하거나 사용자가 로그 아웃되었거나 쿠키 또는 GET에서 세션을 읽을 수 없다는 뜻입니다. 이 경우 페이스 북 로그인으로 사용자를 리디렉션합니다. –

1

사용자가 응용 프로그램을 허가했음을 확인하는 API 호출에 액세스 토큰을 전달해보십시오. 아래는 내가하는 일이며, 여러분이 받고있는 OAuthException을 완화하는 데 도움이 될 것입니다.

$user = $facebook->getUser(); 

if($user) { 
    $access_token = $facebook->getAccessToken(); 
    $params = array('access_token' => $access_token); 
    try { 
     $me = $facebook->api("/me", $params); 
    } catch(FacebookApiException $e) { 
     $user = null; 
    } 
} 

if($me) { 
    // proceed with authenticated user with an active access token. 
}