2

Facebook에서 sucessfull 사용자 로그인 후 리디렉션 URL에 배치 한 코드 아래에있는 PHP SDK 3.2.2를 사용하여 Facebook에서 액세스 토큰을 검색하려고합니다. . 내 문제는 $ this-> facebook-> getAccessToken() 사용자가 APP에 대한 액세스 권한을 부여한 후에 사용자 액세스 토큰을 되돌려주지 않고 'AppId | AppSecret'형식의 문자열 만 입력하면됩니다. 수동으로 사용자 액세스 토큰을 가져 오는 코드를 포함하십시오. 이 작업은,하지만 난 모르겠어요 getAccessToken을 사용하면 올바른 토큰을 돌려주지 않는 이유는 무엇입니까? $ code를 사용하는 것보다 User Access Token을 검색하는 더 좋은 방법이 있다면 이것이 좋은 방법이라고 생각하지 않기 때문에 어떻게하는지 알고 싶습니다.Facebook에서 Access Token 가져 오기 PHP SDK가 제대로 작동하지 않습니다.

참고 : Codeigniter 라이브러리로로드하기 때문에 $ this-> facebook을 사용합니다.

$access_token = $this->facebook->getAccessToken(); 

    //------------------------------------------------------------------------- 
    //echo '<br/>Access Token: ' . $access_token; 
    // Generare Token if not created: 
    $code = $_REQUEST["code"]; 

    if (isset($code)) { 
    //echo '<br/>Code Enviado: ' . $code; 
    //exit(); 
    $appId  = $this->facebook->getAppId(); 
    $appSecret = $this->facebook->getAppSecret(); 

    $redirectTo = base_url('asociar/acc_facebook/step2/'); 

    $token_url="https://graph.facebook.com/oauth/access_token?client_id=" 
     . $appId . "&redirect_uri=" . urlencode($redirectTo) 
     . "&client_secret=" . $appSecret 
     . "&code=" . $code . "&display=popup"; 
    $response = file_get_contents($token_url); 
    $params = null; 
    parse_str($response, $params); 
    $access_token = $params['access_token']; 

    //echo '<br/>Repitiendo el Token'; 

    $this->facebook->setAccessToken($access_token); 
    //echo '<br/>Second Access Token Fijado: ' . $access_token; 
    } 
    //----------------------------------------------------------------------- 

UPDATE :

나는 (그것에 대해 내 자신의 대답을 확인) PHP SDK와 함께 CI를 사용으로 인해이 문제가 있지만, 대답은 페이스 북 PHP SDK이 문제가 사람 (확인에 유효 @Imbru 대답)

답변

0

응답이 늦지 만 다른 사용자에게 도움이 될 수 있습니다.

오늘 같은 문제가 있습니다.

내 access_token이 $ _SESSION에 올바르게 저장되지 않았습니다. 클라이언트 측에서 access_token을 한 번 전송합니다. 그것을 메모리에 저장 (SESSION)하고 재사용해야합니다. 어떤 신용이, 그에게 주면, @Imbru이 용액에 저를 지적 더 설명

+1

안녕하세요! 내가 당신의 답변을 수락 한 것으로 표시했는데, 내가 체크하지는 않았지만, 네가 옳다는 것을 확신하기 때문이다. Codeigniter PHP 네이티브 세션을 사용하지 마십시오. 쿠키의 모든 데이터를 보냅니다. 따라서 Facebook SDK가 SESSION에 토큰의 값을 저장하려고 시도 할 때 쿠키의 데이터를 저장할 수 없습니다. – Chococroc

2

에 대한 @Chococroc 응답 : 정상적인 시간에

, 페이스 북 PHP SDK는

편집 ... 그것을 할.

Codeigniter를 사용할 때 모든 세션 데이터가 쿠키에 저장되고 브라우저에 보내어 서버에 저장되지 않습니다. 예, 그들은 그것을하고 많은 다른 문제로 이어집니다 (당신이 많은 양의 데이터를 저장할 때 세션을 잃어 버리고, 브라우저는 당신에게 그것의 일부분 만 보냅니다, 그러나 그것은 또 다른 역사입니다).

CI를 사용하면 솔루션이 세션 코어 클래스를 PHP $ _SESSION으로 세션을 관리하는 다른 세션 클래스 (예 : https://bitbucket.org/xperez/core-session-storage-for-codeigniter)로 덮어 씁니다 (프로젝트에서 사용하고 매력처럼 작동 함). 그렇게하면 PHP-sdk를 사용할 때 세션의 값을 저장하게되고 Facebook 클래스가 값을 다시 가져 오려고하면 해당 값을 수행 할 수 있습니다.

물론 페이스 북 PHP SDK에 문제가있는 경우 검색 할 때 서버에 값이 없으므로 $ _SESSION에 원하는 값이 저장되어 있는지 확인하십시오. 인증의 오류로 안내합니다.